> ## Documentation Index
> Fetch the complete documentation index at: https://docs.hanko.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Using Hanko webhooks

> Discover how to implement Hanko webhooks to receive real-time authentication event notifications. Learn to create, manage, and respond to user-related triggers.

<div class="hidden">
  **Hanko Webhooks Guide**:

  **About Hanko**:

  Hanko is a modern open source authentication solution and the fastest way you integrate passkeys, 2FA, SSO, and more—with full control over your data. Move between self-hosted and Hanko Cloud anytime. No lock-in. Just Auth how it should be: secure, user friendly, and fully yours.

  **What This Guide Covers**: This guide demonstrates how to implement webhooks with Hanko to receive real-time notifications about authentication events. You'll learn to create webhook endpoints, validate payloads, and process user lifecycle and email events for data synchronization and custom workflows.

  **Key Technologies**:

  * HTTP Webhooks
  * JSON Web Tokens (JWT)
  * Webhook Signature Verification
  * Event Processing
  * RESTful APIs
  * Hanko Cloud Console

  **Prerequisites**:

  * Hanko Pro or Enterprise plan subscription
  * Public HTTPS endpoint for webhook delivery
  * Understanding of HTTP request handling
  * JWT verification knowledge
  * Server-side development capabilities

  **Tasks You'll Complete**:

  * Create webhook subscriptions in Hanko Cloud
  * Build webhook endpoint for event processing
  * Validate JWT signatures for security
  * Parse and process different event types
  * Handle user lifecycle events (create, update, delete)
  * Process email send events for custom delivery
  * Implement error handling and retry logic
</div>

<Note>
  This feature is only available in the Pro or Enterprise [plans](https://www.hanko.io/pricing).
</Note>

## About webhooks

Webhooks enable real-time event subscriptions within your Hanko project, automatically delivering event data to your server whenever authentication events occur. This facilitates user data synchronization and custom workflow automation.

Create webhooks by specifying a callback URL and selecting events to monitor. When subscribed events occur, Hanko sends HTTP POST requests with event data to your specified endpoint. Your application can then process this data through a publicly accessible HTTPS endpoint.

<Frame caption={"High level overview of creating webhooks and handling webhook deliveries"}>
  ```mermaid theme={null}
  sequenceDiagram
  participant A as Relying Party
  participant B as Hanko

  A->>B: Create webhook
  B->>B: Event occurs
  B->>A: HTTP POST to callback URL
  A->>A: Parse webhook payload
  A->>A: Validate event data
  A->>A: Process event data
  A-->>B: Acknowledge delivery
  ```
</Frame>

## Creating webhooks

Set up webhooks through these steps:

<Steps>
  <Step title={"Access webhook settings"}>
    Log in to [Hanko Cloud Console](https://cloud.hanko.io), select your organization and project, then navigate to
    `Settings > Webhooks`.
  </Step>

  <Step title={"Configure your webhook"}>
    Click `Create webhook`, enter your callback URL, and select events for subscription.
    Review [Events](#events) for complete event type information.
  </Step>
</Steps>

You can implement either a single webhook endpoint handling multiple events or separate webhooks for specific event types, depending on your architecture preferences.

## Handling webhook deliveries

Process webhook deliveries through these steps:

<Steps>
  <Step title={"Create callback endpoint"}>
    Implement a publicly accessible HTTP POST endpoint at your configured callback URL to receive webhook deliveries.
  </Step>

  <Step title={"Parse webhook payload"}>
    Extract the webhook [event payload](#event-payload) containing event information and JWT-encoded event data.
  </Step>

  <Step title={"Validate payload authenticity"}>
    Verify JWT signatures using your tenant's [.well-known](/api-reference/public/well-known/get-json-web-key-set) endpoint to ensure deliveries originate from Hanko and remain uncompromised.
  </Step>

  <Step title={"Decode JWT token"}>
    Parse the JWT to extract event data from the token payload. Event data structures vary by event type - see [Event types and token payloads](#event-types-and-token-payloads).
  </Step>

  <Step title={"Process event data"}>
    Handle the extracted event data according to your application's specific requirements.
  </Step>
</Steps>

<Accordion title={"Example (Javascript)"}>
  This example uses [express](https://www.npmjs.com/package/express) and the [jose](https://www.npmjs.com/package/jose)
  package to parse and verify JWTs.

  ```shell theme={null}
  npm install express jose
  ```

  The example assumes usage of a single HTTP endpoint for all event types but you could just as well configure
  multiple webhooks and use multiple HTTP endpoints.

  ```javascript theme={null}
  // These are the dependencies you should have installed for
  // this example.
  const express = require('express');
  const { createRemoteJWKSet, jwtVerify } = require('jose');

  const app = express();

  // Middleware for parsing requests with a JSON payload.
  app.use(express.json());

  // Step 1: This defines a POST endpoint at the `/webhook` path.
  // This path should match the path portion of the URL that you
  // specified for the callback URL when you created the webhook.
  // Once you edit a webhook by updating the callback URL of your
  // webhook, you should change this to match the path portion of
  // the updated URL for your webhook.
  app.post('/webhook', async (req, res) => {
      // Step 2: Extract the event and token from the request body.
      // You could use the event type to branch and apply
      // logic/code for specific event types.
      // This example assumes one endpoint for all event types so
      // extracting the `event` property may lead to an unused
      // variable.
      const { event, token } = req.body;

      try {
          // This would likely come from your environment/config.
          // You can always find your tenant ID on the dashboard
          // for your project in the Hanko Cloud Console.
          const tenantId = 'your-tenant-id';

          // See also the API reference:
          // http://docs.hanko.io/api-reference/public/well-known/get-json-web-key-set
          const jwksUrl = `https://${tenantId}.hanko.io/.well-known/jwks.json`;

          // Step 3 + 4: Fetch the JWKS of your Hanko tenant, verify
          // the token signature using the JWKS and extract the
          // payload.
          const jwks = createRemoteJWKSet(new URL(jwksUrl));
          const { payload } = await jwtVerify(token, jwks);

          console.log('Decoded token payload:', payload);

          // Step 6: Do further processing according to your
          // application's needs.

      } catch (error) {
          console.error('Error processing the token:', error.message);
      }

      //  Your endpoint should respond with a 2XX response within 30 seconds
      //  of receiving a webhook delivery to indicate that the delivery was
      //  successfully received. If your server takes longer than that to
      //  respond, then Hanko terminates the connection and considers the
      //  delivery a failure.
      res.sendStatus(202);
  });

  // Start the Express server
  const PORT = 3000;
  app.listen(PORT, () => {
      console.log(`Server is running on http://localhost:${PORT}`);
  });

  ```
</Accordion>

<Warning>
  Your server **must** return the complete certificate chain otherwise the request will fail.
</Warning>

## Editing and removing webhooks

Manage existing webhooks through these steps:

<Steps>
  <Step title={"Access webhook settings"}>
    Log in to [Hanko Cloud](https://cloud.hanko.io), select your organization and project, then navigate to
    `Settings > Webhooks`.
  </Step>

  <Step title={"Modify or delete webhooks"}>
    Find your webhook and click the three dots (`...`). Choose `Edit` to modify the callback URL or event subscriptions, or `Delete` to remove the webhook completely.
  </Step>
</Steps>

## Events

Hanko offers various event types for subscription. Each event type determines the structure and content of the payload delivered to your callback URL.

### Event payload

The structure of the event payload is the same across all event types. It contains the event type and the event data in the form of a JSON Web
Token (JWT).

<AccordionGroup>
  <Accordion title={"Event payload example"}>
    ```json user.create theme={null}
    {
        "token": "eyJhbGciOiJSUzI1NiIsImtpZCI6...",
        "event": "user.create"
    }
    ```
  </Accordion>

  <Accordion title={"Event payload properties"}>
    <ResponseField name="token" type="string">
      The JWT that contains the actual webhook event data. It is a JSON Web Signature (JWS). Webhook recipients
      should verify the signature to ensure that the webhook deliveries were sent by Hanko and have not been
      tampered with.
    </ResponseField>

    <ResponseField name="event" type="string">
      The event that triggered this webhook
    </ResponseField>
  </Accordion>
</AccordionGroup>

### Event types and token payloads

Events are structured hierarchically with some events subsuming the occurrence of multiple ("sub")-events. These
types of events do not actually appear as the value for the `event` property in the webhook event payload. Subscribing
to these types of events when creating a webhook is a convenient way to group certain event types and allows you to
structure your callback endpoints around these groups.

A webhook's event data is encoded as a JWT in the webhook's callback request body. You need to parse the token
to access the token's payload which contains the actual event data (see
[Handling webhook deliveries](#handling-webhook-deliveries) for an example).

#### user

Subscribing to this event implies subscription to the following events:
[`user.create`](#user-create),
[`user.delete`](#user-delete),
[`user.login`](#user-login),
[`user.udpate.email.create`](#user-update-email-create),
[`user.update.email.delete`](#user-update-email-delete),
[`user.update.email.primary`](#user-update-email-primary),
[`user.update.password.update`](#user-update-password-update)
[`user.update.username.create`](#user-update-username-create),
[`user.update.username.delete`](#user-update-username-delete),
[`user.update.username.update`](#user-update-username-update)

#### user.create

This event is triggered when a new user is created.

<AccordionGroup>
  <Accordion title={"'user.create' token payload example"}>
    ```json theme={null}
    {
        "aud": [
            "Test Service ABC"
        ],
        "data": {
            "created_at": "2025-01-15T12:57:56.724052Z",
            "emails": [
                {
                    "id": "d31be36d-08d7-409f-8437-1920628e6e51",
                    "address": "test@example.com",
                    "is_verified": true,
                    "is_primary": true,
                    "created_at": "2025-01-15T13:57:56.72784Z",
                    "updated_at": "2025-01-15T13:57:56.72801Z"
                }
            ],
            "id": "42fbd0dc-28fb-4144-892c-c2c4a0f8f5d8",
            "identities": [
                {
                    "id": "b3af92c5-414c-4c6b-a3ea-82ee263badef",
                    "provider_id": "123456abcd",
                    "provider_name": "testprovider",
                    "email_id": "d31be36d-08d7-409f-8437-1920628e6e51",
                    "created_at": "2025-01-17T13:40:11Z",
                    "updated_at": "2025-01-17T13:40:13Z"
                }
            ],
            "ip_address": "127.0.0.1",
            "otp": {
                "id": "a7efd1ee-d7b2-440e-9284-625e06931745",
                "created_at": "2025-01-17T13:39:29.081428Z"
            },
            "password": {
                "id": "6ec87b0c-67db-42ef-9adb-d106734bde02",
                "created_at": "2025-01-15T13:57:56.735651Z",
                "updated_at": "2025-01-15T13:57:56.735651Z"
            },
            "updated_at": "2025-01-15T13:57:56.724255Z",
            "username": {
                "id": "61580d7d-0c11-4c25-bfca-ace21a14cc01",
                "username": "testmakker",
                "created_at": "2025-01-15T14:45:00.293001Z",
                "updated_at": "2025-01-17T13:46:41.700373Z"
            },
            "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36",
            "webauthn_credentials": [
                {
                    "id": "eaYxbrFQJjl5dW5SAr0KznEmHwAen8HUAiaKN9ijsDY",
                    "public_key": "pQECAyYgASFYIMq-SVnCDGIJjK2TAJyEQyXNtOw7x_MuEVUQuW80-AOcIlggyEcR_v5C8PuhrThwgx2urmRqviIb7dyXmGr3oyWk2rU",
                    "attestation_type": "packed",
                    "aaguid": "70a4ab68-d027-451a-9c86-3b8fd8414f68",
                    "last_used_at": "2025-01-17T12:38:28.698563Z",
                    "created_at": "2025-01-17T12:38:28.698563Z",
                    "transports": [
                        "usb"
                    ],
                    "backup_eligible": false,
                    "backup_state": false,
                    "mfa_only": true
                },
                {
                    "id": "BPtYkS1prrGu1owU3StJwWM5uYtVoD1-h4N_rPHrB84",
                    "public_key": "pQECAyYgASFYILo4i3yC0V2kciBHL96EOx08h32CXXIFnuUmggHOhkGvIlggQFIp4CeJhzGpCiTNuQQoyiKV7oMLYxM549ctLJXJkZ0",
                    "attestation_type": "packed",
                    "aaguid": "649b9062-5892-4223-832b-921c5bce5827",
                    "last_used_at": "2025-01-17T12:39:06.718171Z",
                    "created_at": "2025-01-17T12:39:06.718171Z",
                    "transports": [
                        "usb"
                    ],
                    "backup_eligible": false,
                    "backup_state": false,
                    "mfa_only": false
                }
            ]
        },
        "evt": "<string>", // the corresponding event type
        "exp": 1737118303,
        "iat": 1737118003,
        "sub": "hanko webhooks"
    }
    ```
  </Accordion>

  <Accordion title={"'user.create' token payload properties"}>
    <ResponseField name="aud" type="string[]">
      The recipients the token is intended for
    </ResponseField>

    <ResponseField name="data" type="object">
      <Expandable>
        <ResponseField name="id" type="string">
          The ID of the user
        </ResponseField>

        <ResponseField name="created_at" type="string">
          Time of creation of the user
        </ResponseField>

        <ResponseField name="emails" type="object[]">
          <Expandable>
            <ResponseField name="id" type="string">
              The ID of the email
            </ResponseField>

            <ResponseField name="address" type="string">
              The actual email address
            </ResponseField>

            <ResponseField name="created_at" type="string">
              Time of creation of the email
            </ResponseField>

            <ResponseField name="is_primary" type="boolean">
              Indicates whether this is the primary email
            </ResponseField>

            <ResponseField name="is_verified" type="boolean">
              Indicates whether this email is verified
            </ResponseField>

            <ResponseField name="updated_at" type="string">
              Time of last update of the email
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="identities" type="object[]">
          <Expandable>
            <ResponseField name="id" type="string">
              The ID of the identity
            </ResponseField>

            <ResponseField name="provider_id" type="string">
              The ID of the user at the third party provider
            </ResponseField>

            <ResponseField name="provider_name" type="string">
              The name of the third party provider
            </ResponseField>

            <ResponseField name="email_id" type="string">
              The ID of the email the identity is related to
            </ResponseField>

            <ResponseField name="created_at" type="string">
              Time of creation of the identity
            </ResponseField>

            <ResponseField name="updated_at" type="string">
              Time of last update of the identity
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="otp" type="object">
          MFA OTP credential of the user

          <Expandable>
            <ResponseField name="id" type="string">
              ID of the OTP credential
            </ResponseField>

            <ResponseField name="created_at" type="string">
              Time of creation of the OTP credential
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="password" type="object">
          Representation of the password credential of the user

          <Expandable>
            <ResponseField name="id" type="string">
              The ID of the password credential
            </ResponseField>

            <ResponseField name="created_at" type="string">
              Time of creation of the password credential
            </ResponseField>

            <ResponseField name="updated_at" type="string">
              Time of last update of the password credential
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="updated_at" type="string">
          Time of last update of the user
        </ResponseField>

        <ResponseField name="username" type="object">
          The username of the user

          <Expandable>
            <ResponseField name="id" type="string">
              The ID of the username
            </ResponseField>

            <ResponseField name="username" type="string">
              The actual username of the user
            </ResponseField>

            <ResponseField name="created_at" type="string">
              Time of creation of the username
            </ResponseField>

            <ResponseField name="updated_at" type="string">
              Time of last update of the username
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="webauthn_credentials" type="object">
          Registered WebAuthn credentials (passkeys and security keys) of the user

          <Expandable>
            <ResponseField name="aaguid" type="string">
              The ID authenticator that created the credential
            </ResponseField>

            <ResponseField name="attestation_type" type="string">
              Format in which the signature is represented and the various contextual
              bindings are incorporated into the attestation statement by the authenticator
            </ResponseField>

            <ResponseField name="backup_eligible" type="string">
              Indicates whether the credential may be backed up in some fashion such that they may become present
              on an authenticator other than their generating authenticator
            </ResponseField>

            <ResponseField name="backup_state" type="string">
              Indicates whether this credential is backed up or not
            </ResponseField>

            <ResponseField name="created_at" type="string">
              The time of creation of the credential
            </ResponseField>

            <ResponseField name="id" type="string">
              The ID of the credential
            </ResponseField>

            <ResponseField name="last_used_at" type="string">
              Indicates when the credential was lst used
            </ResponseField>

            <ResponseField name="public_key" type="string">
              The public key of the credential (Base64URL string)
            </ResponseField>

            <ResponseField name="transports" type="string[]">
              Communication methods/protocols used to create the credential
            </ResponseField>

            <ResponseField name="mfa_only" type="string">
              Indicates whether this is an MFA credential (security key) or a first factor credential
              (passkey)
            </ResponseField>
          </Expandable>
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="evt" type="string">
      The event that triggered the webhook containing this data
    </ResponseField>

    <ResponseField name="exp" type="number">
      The expiration date of the token
    </ResponseField>

    <ResponseField name="iat" type="number">
      The time at which the token was issued
    </ResponseField>

    <ResponseField name="sub" type="string" default="hanko webhooks" />
  </Accordion>
</AccordionGroup>

#### user.delete

This event is triggered when a user is deleted.

<AccordionGroup>
  <Accordion title={"'user.delete' token payload example"}>
    ```json theme={null}
    {
        "aud": [
            "Test Service ABC"
        ],
        "data": {
            "created_at": "2025-01-15T12:57:56.724052Z",
            "emails": [
                {
                    "id": "d31be36d-08d7-409f-8437-1920628e6e51",
                    "address": "test@example.com",
                    "is_verified": true,
                    "is_primary": true,
                    "created_at": "2025-01-15T13:57:56.72784Z",
                    "updated_at": "2025-01-15T13:57:56.72801Z"
                }
            ],
            "id": "42fbd0dc-28fb-4144-892c-c2c4a0f8f5d8",
            "identities": [
                {
                    "id": "b3af92c5-414c-4c6b-a3ea-82ee263badef",
                    "provider_id": "123456abcd",
                    "provider_name": "testprovider",
                    "email_id": "d31be36d-08d7-409f-8437-1920628e6e51",
                    "created_at": "2025-01-17T13:40:11Z",
                    "updated_at": "2025-01-17T13:40:13Z"
                }
            ],
            "ip_address": "127.0.0.1",
            "otp": {
                "id": "a7efd1ee-d7b2-440e-9284-625e06931745",
                "created_at": "2025-01-17T13:39:29.081428Z"
            },
            "password": {
                "id": "6ec87b0c-67db-42ef-9adb-d106734bde02",
                "created_at": "2025-01-15T13:57:56.735651Z",
                "updated_at": "2025-01-15T13:57:56.735651Z"
            },
            "updated_at": "2025-01-15T13:57:56.724255Z",
            "username": {
                "id": "61580d7d-0c11-4c25-bfca-ace21a14cc01",
                "username": "testmakker",
                "created_at": "2025-01-15T14:45:00.293001Z",
                "updated_at": "2025-01-17T13:46:41.700373Z"
            },
            "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36",
            "webauthn_credentials": [
                {
                    "id": "eaYxbrFQJjl5dW5SAr0KznEmHwAen8HUAiaKN9ijsDY",
                    "public_key": "pQECAyYgASFYIMq-SVnCDGIJjK2TAJyEQyXNtOw7x_MuEVUQuW80-AOcIlggyEcR_v5C8PuhrThwgx2urmRqviIb7dyXmGr3oyWk2rU",
                    "attestation_type": "packed",
                    "aaguid": "70a4ab68-d027-451a-9c86-3b8fd8414f68",
                    "last_used_at": "2025-01-17T12:38:28.698563Z",
                    "created_at": "2025-01-17T12:38:28.698563Z",
                    "transports": [
                        "usb"
                    ],
                    "backup_eligible": false,
                    "backup_state": false,
                    "mfa_only": true
                },
                {
                    "id": "BPtYkS1prrGu1owU3StJwWM5uYtVoD1-h4N_rPHrB84",
                    "public_key": "pQECAyYgASFYILo4i3yC0V2kciBHL96EOx08h32CXXIFnuUmggHOhkGvIlggQFIp4CeJhzGpCiTNuQQoyiKV7oMLYxM549ctLJXJkZ0",
                    "attestation_type": "packed",
                    "aaguid": "649b9062-5892-4223-832b-921c5bce5827",
                    "last_used_at": "2025-01-17T12:39:06.718171Z",
                    "created_at": "2025-01-17T12:39:06.718171Z",
                    "transports": [
                        "usb"
                    ],
                    "backup_eligible": false,
                    "backup_state": false,
                    "mfa_only": false
                }
            ]
        },
        "evt": "<string>", // the corresponding event type
        "exp": 1737118303,
        "iat": 1737118003,
        "sub": "hanko webhooks"
    }
    ```
  </Accordion>

  <Accordion title={"'user.delete' token payload properties"}>
    <ResponseField name="aud" type="string[]">
      The recipients the token is intended for
    </ResponseField>

    <ResponseField name="data" type="object">
      <Expandable>
        <ResponseField name="id" type="string">
          The ID of the user
        </ResponseField>

        <ResponseField name="created_at" type="string">
          Time of creation of the user
        </ResponseField>

        <ResponseField name="emails" type="object[]">
          <Expandable>
            <ResponseField name="id" type="string">
              The ID of the email
            </ResponseField>

            <ResponseField name="address" type="string">
              The actual email address
            </ResponseField>

            <ResponseField name="created_at" type="string">
              Time of creation of the email
            </ResponseField>

            <ResponseField name="is_primary" type="boolean">
              Indicates whether this is the primary email
            </ResponseField>

            <ResponseField name="is_verified" type="boolean">
              Indicates whether this email is verified
            </ResponseField>

            <ResponseField name="updated_at" type="string">
              Time of last update of the email
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="identities" type="object[]">
          <Expandable>
            <ResponseField name="id" type="string">
              The ID of the identity
            </ResponseField>

            <ResponseField name="provider_id" type="string">
              The ID of the user at the third party provider
            </ResponseField>

            <ResponseField name="provider_name" type="string">
              The name of the third party provider
            </ResponseField>

            <ResponseField name="email_id" type="string">
              The ID of the email the identity is related to
            </ResponseField>

            <ResponseField name="created_at" type="string">
              Time of creation of the identity
            </ResponseField>

            <ResponseField name="updated_at" type="string">
              Time of last update of the identity
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="otp" type="object">
          MFA OTP credential of the user

          <Expandable>
            <ResponseField name="id" type="string">
              ID of the OTP credential
            </ResponseField>

            <ResponseField name="created_at" type="string">
              Time of creation of the OTP credential
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="password" type="object">
          Representation of the password credential of the user

          <Expandable>
            <ResponseField name="id" type="string">
              The ID of the password credential
            </ResponseField>

            <ResponseField name="created_at" type="string">
              Time of creation of the password credential
            </ResponseField>

            <ResponseField name="updated_at" type="string">
              Time of last update of the password credential
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="updated_at" type="string">
          Time of last update of the user
        </ResponseField>

        <ResponseField name="username" type="object">
          The username of the user

          <Expandable>
            <ResponseField name="id" type="string">
              The ID of the username
            </ResponseField>

            <ResponseField name="username" type="string">
              The actual username of the user
            </ResponseField>

            <ResponseField name="created_at" type="string">
              Time of creation of the username
            </ResponseField>

            <ResponseField name="updated_at" type="string">
              Time of last update of the username
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="webauthn_credentials" type="object">
          Registered WebAuthn credentials (passkeys and security keys) of the user

          <Expandable>
            <ResponseField name="aaguid" type="string">
              The ID authenticator that created the credential
            </ResponseField>

            <ResponseField name="attestation_type" type="string">
              Format in which the signature is represented and the various contextual
              bindings are incorporated into the attestation statement by the authenticator
            </ResponseField>

            <ResponseField name="backup_eligible" type="string">
              Indicates whether the credential may be backed up in some fashion such that they may become present
              on an authenticator other than their generating authenticator
            </ResponseField>

            <ResponseField name="backup_state" type="string">
              Indicates whether this credential is backed up or not
            </ResponseField>

            <ResponseField name="created_at" type="string">
              The time of creation of the credential
            </ResponseField>

            <ResponseField name="id" type="string">
              The ID of the credential
            </ResponseField>

            <ResponseField name="last_used_at" type="string">
              Indicates when the credential was lst used
            </ResponseField>

            <ResponseField name="public_key" type="string">
              The public key of the credential (Base64URL string)
            </ResponseField>

            <ResponseField name="transports" type="string[]">
              Communication methods/protocols used to create the credential
            </ResponseField>

            <ResponseField name="mfa_only" type="string">
              Indicates whether this is an MFA credential (security key) or a first factor credential
              (passkey)
            </ResponseField>
          </Expandable>
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="evt" type="string">
      The event that triggered the webhook containing this data
    </ResponseField>

    <ResponseField name="exp" type="number">
      The expiration date of the token
    </ResponseField>

    <ResponseField name="iat" type="number">
      The time at which the token was issued
    </ResponseField>

    <ResponseField name="sub" type="string" default="hanko webhooks" />
  </Accordion>
</AccordionGroup>

#### user.login

This event is triggered when a user logs in.

<AccordionGroup>
  <Accordion title={"'user.login' token payload example"}>
    ```json theme={null}
    {
        "aud": [
            "Test Service ABC"
        ],
        "data": {
            "created_at": "2025-01-15T12:57:56.724052Z",
            "emails": [
                {
                    "id": "d31be36d-08d7-409f-8437-1920628e6e51",
                    "address": "test@example.com",
                    "is_verified": true,
                    "is_primary": true,
                    "created_at": "2025-01-15T13:57:56.72784Z",
                    "updated_at": "2025-01-15T13:57:56.72801Z"
                }
            ],
            "id": "42fbd0dc-28fb-4144-892c-c2c4a0f8f5d8",
            "identities": [
                {
                    "id": "b3af92c5-414c-4c6b-a3ea-82ee263badef",
                    "provider_id": "123456abcd",
                    "provider_name": "testprovider",
                    "email_id": "d31be36d-08d7-409f-8437-1920628e6e51",
                    "created_at": "2025-01-17T13:40:11Z",
                    "updated_at": "2025-01-17T13:40:13Z"
                }
            ],
            "ip_address": "127.0.0.1",
            "otp": {
                "id": "a7efd1ee-d7b2-440e-9284-625e06931745",
                "created_at": "2025-01-17T13:39:29.081428Z"
            },
            "password": {
                "id": "6ec87b0c-67db-42ef-9adb-d106734bde02",
                "created_at": "2025-01-15T13:57:56.735651Z",
                "updated_at": "2025-01-15T13:57:56.735651Z"
            },
            "updated_at": "2025-01-15T13:57:56.724255Z",
            "username": {
                "id": "61580d7d-0c11-4c25-bfca-ace21a14cc01",
                "username": "testmakker",
                "created_at": "2025-01-15T14:45:00.293001Z",
                "updated_at": "2025-01-17T13:46:41.700373Z"
            },
            "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36",
            "webauthn_credentials": [
                {
                    "id": "eaYxbrFQJjl5dW5SAr0KznEmHwAen8HUAiaKN9ijsDY",
                    "public_key": "pQECAyYgASFYIMq-SVnCDGIJjK2TAJyEQyXNtOw7x_MuEVUQuW80-AOcIlggyEcR_v5C8PuhrThwgx2urmRqviIb7dyXmGr3oyWk2rU",
                    "attestation_type": "packed",
                    "aaguid": "70a4ab68-d027-451a-9c86-3b8fd8414f68",
                    "last_used_at": "2025-01-17T12:38:28.698563Z",
                    "created_at": "2025-01-17T12:38:28.698563Z",
                    "transports": [
                        "usb"
                    ],
                    "backup_eligible": false,
                    "backup_state": false,
                    "mfa_only": true
                },
                {
                    "id": "BPtYkS1prrGu1owU3StJwWM5uYtVoD1-h4N_rPHrB84",
                    "public_key": "pQECAyYgASFYILo4i3yC0V2kciBHL96EOx08h32CXXIFnuUmggHOhkGvIlggQFIp4CeJhzGpCiTNuQQoyiKV7oMLYxM549ctLJXJkZ0",
                    "attestation_type": "packed",
                    "aaguid": "649b9062-5892-4223-832b-921c5bce5827",
                    "last_used_at": "2025-01-17T12:39:06.718171Z",
                    "created_at": "2025-01-17T12:39:06.718171Z",
                    "transports": [
                        "usb"
                    ],
                    "backup_eligible": false,
                    "backup_state": false,
                    "mfa_only": false
                }
            ]
        },
        "evt": "<string>", // the corresponding event type
        "exp": 1737118303,
        "iat": 1737118003,
        "sub": "hanko webhooks"
    }
    ```
  </Accordion>

  <Accordion title={"'user.login' token payload properties"}>
    <ResponseField name="aud" type="string[]">
      The recipients the token is intended for
    </ResponseField>

    <ResponseField name="data" type="object">
      <Expandable>
        <ResponseField name="id" type="string">
          The ID of the user
        </ResponseField>

        <ResponseField name="created_at" type="string">
          Time of creation of the user
        </ResponseField>

        <ResponseField name="emails" type="object[]">
          <Expandable>
            <ResponseField name="id" type="string">
              The ID of the email
            </ResponseField>

            <ResponseField name="address" type="string">
              The actual email address
            </ResponseField>

            <ResponseField name="created_at" type="string">
              Time of creation of the email
            </ResponseField>

            <ResponseField name="is_primary" type="boolean">
              Indicates whether this is the primary email
            </ResponseField>

            <ResponseField name="is_verified" type="boolean">
              Indicates whether this email is verified
            </ResponseField>

            <ResponseField name="updated_at" type="string">
              Time of last update of the email
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="identities" type="object[]">
          <Expandable>
            <ResponseField name="id" type="string">
              The ID of the identity
            </ResponseField>

            <ResponseField name="provider_id" type="string">
              The ID of the user at the third party provider
            </ResponseField>

            <ResponseField name="provider_name" type="string">
              The name of the third party provider
            </ResponseField>

            <ResponseField name="email_id" type="string">
              The ID of the email the identity is related to
            </ResponseField>

            <ResponseField name="created_at" type="string">
              Time of creation of the identity
            </ResponseField>

            <ResponseField name="updated_at" type="string">
              Time of last update of the identity
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="otp" type="object">
          MFA OTP credential of the user

          <Expandable>
            <ResponseField name="id" type="string">
              ID of the OTP credential
            </ResponseField>

            <ResponseField name="created_at" type="string">
              Time of creation of the OTP credential
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="password" type="object">
          Representation of the password credential of the user

          <Expandable>
            <ResponseField name="id" type="string">
              The ID of the password credential
            </ResponseField>

            <ResponseField name="created_at" type="string">
              Time of creation of the password credential
            </ResponseField>

            <ResponseField name="updated_at" type="string">
              Time of last update of the password credential
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="updated_at" type="string">
          Time of last update of the user
        </ResponseField>

        <ResponseField name="username" type="object">
          The username of the user

          <Expandable>
            <ResponseField name="id" type="string">
              The ID of the username
            </ResponseField>

            <ResponseField name="username" type="string">
              The actual username of the user
            </ResponseField>

            <ResponseField name="created_at" type="string">
              Time of creation of the username
            </ResponseField>

            <ResponseField name="updated_at" type="string">
              Time of last update of the username
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="webauthn_credentials" type="object">
          Registered WebAuthn credentials (passkeys and security keys) of the user

          <Expandable>
            <ResponseField name="aaguid" type="string">
              The ID authenticator that created the credential
            </ResponseField>

            <ResponseField name="attestation_type" type="string">
              Format in which the signature is represented and the various contextual
              bindings are incorporated into the attestation statement by the authenticator
            </ResponseField>

            <ResponseField name="backup_eligible" type="string">
              Indicates whether the credential may be backed up in some fashion such that they may become present
              on an authenticator other than their generating authenticator
            </ResponseField>

            <ResponseField name="backup_state" type="string">
              Indicates whether this credential is backed up or not
            </ResponseField>

            <ResponseField name="created_at" type="string">
              The time of creation of the credential
            </ResponseField>

            <ResponseField name="id" type="string">
              The ID of the credential
            </ResponseField>

            <ResponseField name="last_used_at" type="string">
              Indicates when the credential was lst used
            </ResponseField>

            <ResponseField name="public_key" type="string">
              The public key of the credential (Base64URL string)
            </ResponseField>

            <ResponseField name="transports" type="string[]">
              Communication methods/protocols used to create the credential
            </ResponseField>

            <ResponseField name="mfa_only" type="string">
              Indicates whether this is an MFA credential (security key) or a first factor credential
              (passkey)
            </ResponseField>
          </Expandable>
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="evt" type="string">
      The event that triggered the webhook containing this data
    </ResponseField>

    <ResponseField name="exp" type="number">
      The expiration date of the token
    </ResponseField>

    <ResponseField name="iat" type="number">
      The time at which the token was issued
    </ResponseField>

    <ResponseField name="sub" type="string" default="hanko webhooks" />
  </Accordion>
</AccordionGroup>

#### user.update

Subscribing to this event implies subscription to the following events:
[`user.udpate.email.create`](#user-update-email-create),
[`user.update.email.delete`](#user-update-email-delete),
[`user.update.email.primary`](#user-update-email-primary),
[`user.update.password.update`](#user-update-password-update)
[`user.update.username.create`](#user-update-username-create),
[`user.update.username.delete`](#user-update-username-delete),
[`user.update.username.update`](#user-update-username-update)

#### user.update.email

Subscribing to this event implies subscription to the following events:
[`user.udpate.email.create`](#user-update-email-create),
[`user.update.email.delete`](#user-update-email-delete),
[`user.update.email.primary`](#user-update-email-primary)

#### user.update.email.create

This event is triggered when an email is created for a user.

<AccordionGroup>
  <Accordion title={"'user.update.email.create' token payload example"}>
    ```json theme={null}
    {
        "aud": [
            "Test Service ABC"
        ],
        "data": {
            "created_at": "2025-01-15T12:57:56.724052Z",
            "emails": [
                {
                    "id": "d31be36d-08d7-409f-8437-1920628e6e51",
                    "address": "test@example.com",
                    "is_verified": true,
                    "is_primary": true,
                    "created_at": "2025-01-15T13:57:56.72784Z",
                    "updated_at": "2025-01-15T13:57:56.72801Z"
                }
            ],
            "id": "42fbd0dc-28fb-4144-892c-c2c4a0f8f5d8",
            "identities": [
                {
                    "id": "b3af92c5-414c-4c6b-a3ea-82ee263badef",
                    "provider_id": "123456abcd",
                    "provider_name": "testprovider",
                    "email_id": "d31be36d-08d7-409f-8437-1920628e6e51",
                    "created_at": "2025-01-17T13:40:11Z",
                    "updated_at": "2025-01-17T13:40:13Z"
                }
            ],
            "ip_address": "127.0.0.1",
            "otp": {
                "id": "a7efd1ee-d7b2-440e-9284-625e06931745",
                "created_at": "2025-01-17T13:39:29.081428Z"
            },
            "password": {
                "id": "6ec87b0c-67db-42ef-9adb-d106734bde02",
                "created_at": "2025-01-15T13:57:56.735651Z",
                "updated_at": "2025-01-15T13:57:56.735651Z"
            },
            "updated_at": "2025-01-15T13:57:56.724255Z",
            "username": {
                "id": "61580d7d-0c11-4c25-bfca-ace21a14cc01",
                "username": "testmakker",
                "created_at": "2025-01-15T14:45:00.293001Z",
                "updated_at": "2025-01-17T13:46:41.700373Z"
            },
            "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36",
            "webauthn_credentials": [
                {
                    "id": "eaYxbrFQJjl5dW5SAr0KznEmHwAen8HUAiaKN9ijsDY",
                    "public_key": "pQECAyYgASFYIMq-SVnCDGIJjK2TAJyEQyXNtOw7x_MuEVUQuW80-AOcIlggyEcR_v5C8PuhrThwgx2urmRqviIb7dyXmGr3oyWk2rU",
                    "attestation_type": "packed",
                    "aaguid": "70a4ab68-d027-451a-9c86-3b8fd8414f68",
                    "last_used_at": "2025-01-17T12:38:28.698563Z",
                    "created_at": "2025-01-17T12:38:28.698563Z",
                    "transports": [
                        "usb"
                    ],
                    "backup_eligible": false,
                    "backup_state": false,
                    "mfa_only": true
                },
                {
                    "id": "BPtYkS1prrGu1owU3StJwWM5uYtVoD1-h4N_rPHrB84",
                    "public_key": "pQECAyYgASFYILo4i3yC0V2kciBHL96EOx08h32CXXIFnuUmggHOhkGvIlggQFIp4CeJhzGpCiTNuQQoyiKV7oMLYxM549ctLJXJkZ0",
                    "attestation_type": "packed",
                    "aaguid": "649b9062-5892-4223-832b-921c5bce5827",
                    "last_used_at": "2025-01-17T12:39:06.718171Z",
                    "created_at": "2025-01-17T12:39:06.718171Z",
                    "transports": [
                        "usb"
                    ],
                    "backup_eligible": false,
                    "backup_state": false,
                    "mfa_only": false
                }
            ]
        },
        "evt": "<string>", // the corresponding event type
        "exp": 1737118303,
        "iat": 1737118003,
        "sub": "hanko webhooks"
    }
    ```
  </Accordion>

  <Accordion title={"'user.update.email.create' token payload properties"}>
    <ResponseField name="aud" type="string[]">
      The recipients the token is intended for
    </ResponseField>

    <ResponseField name="data" type="object">
      <Expandable>
        <ResponseField name="id" type="string">
          The ID of the user
        </ResponseField>

        <ResponseField name="created_at" type="string">
          Time of creation of the user
        </ResponseField>

        <ResponseField name="emails" type="object[]">
          <Expandable>
            <ResponseField name="id" type="string">
              The ID of the email
            </ResponseField>

            <ResponseField name="address" type="string">
              The actual email address
            </ResponseField>

            <ResponseField name="created_at" type="string">
              Time of creation of the email
            </ResponseField>

            <ResponseField name="is_primary" type="boolean">
              Indicates whether this is the primary email
            </ResponseField>

            <ResponseField name="is_verified" type="boolean">
              Indicates whether this email is verified
            </ResponseField>

            <ResponseField name="updated_at" type="string">
              Time of last update of the email
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="identities" type="object[]">
          <Expandable>
            <ResponseField name="id" type="string">
              The ID of the identity
            </ResponseField>

            <ResponseField name="provider_id" type="string">
              The ID of the user at the third party provider
            </ResponseField>

            <ResponseField name="provider_name" type="string">
              The name of the third party provider
            </ResponseField>

            <ResponseField name="email_id" type="string">
              The ID of the email the identity is related to
            </ResponseField>

            <ResponseField name="created_at" type="string">
              Time of creation of the identity
            </ResponseField>

            <ResponseField name="updated_at" type="string">
              Time of last update of the identity
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="otp" type="object">
          MFA OTP credential of the user

          <Expandable>
            <ResponseField name="id" type="string">
              ID of the OTP credential
            </ResponseField>

            <ResponseField name="created_at" type="string">
              Time of creation of the OTP credential
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="password" type="object">
          Representation of the password credential of the user

          <Expandable>
            <ResponseField name="id" type="string">
              The ID of the password credential
            </ResponseField>

            <ResponseField name="created_at" type="string">
              Time of creation of the password credential
            </ResponseField>

            <ResponseField name="updated_at" type="string">
              Time of last update of the password credential
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="updated_at" type="string">
          Time of last update of the user
        </ResponseField>

        <ResponseField name="username" type="object">
          The username of the user

          <Expandable>
            <ResponseField name="id" type="string">
              The ID of the username
            </ResponseField>

            <ResponseField name="username" type="string">
              The actual username of the user
            </ResponseField>

            <ResponseField name="created_at" type="string">
              Time of creation of the username
            </ResponseField>

            <ResponseField name="updated_at" type="string">
              Time of last update of the username
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="webauthn_credentials" type="object">
          Registered WebAuthn credentials (passkeys and security keys) of the user

          <Expandable>
            <ResponseField name="aaguid" type="string">
              The ID authenticator that created the credential
            </ResponseField>

            <ResponseField name="attestation_type" type="string">
              Format in which the signature is represented and the various contextual
              bindings are incorporated into the attestation statement by the authenticator
            </ResponseField>

            <ResponseField name="backup_eligible" type="string">
              Indicates whether the credential may be backed up in some fashion such that they may become present
              on an authenticator other than their generating authenticator
            </ResponseField>

            <ResponseField name="backup_state" type="string">
              Indicates whether this credential is backed up or not
            </ResponseField>

            <ResponseField name="created_at" type="string">
              The time of creation of the credential
            </ResponseField>

            <ResponseField name="id" type="string">
              The ID of the credential
            </ResponseField>

            <ResponseField name="last_used_at" type="string">
              Indicates when the credential was lst used
            </ResponseField>

            <ResponseField name="public_key" type="string">
              The public key of the credential (Base64URL string)
            </ResponseField>

            <ResponseField name="transports" type="string[]">
              Communication methods/protocols used to create the credential
            </ResponseField>

            <ResponseField name="mfa_only" type="string">
              Indicates whether this is an MFA credential (security key) or a first factor credential
              (passkey)
            </ResponseField>
          </Expandable>
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="evt" type="string">
      The event that triggered the webhook containing this data
    </ResponseField>

    <ResponseField name="exp" type="number">
      The expiration date of the token
    </ResponseField>

    <ResponseField name="iat" type="number">
      The time at which the token was issued
    </ResponseField>

    <ResponseField name="sub" type="string" default="hanko webhooks" />
  </Accordion>
</AccordionGroup>

#### user.update.email.delete

This event is triggered when a user's email is deleted.

<AccordionGroup>
  <Accordion title={"'user.update.email.delete' token payload example"}>
    ```json theme={null}
    {
        "aud": [
            "Test Service ABC"
        ],
        "data": {
            "created_at": "2025-01-15T12:57:56.724052Z",
            "emails": [
                {
                    "id": "d31be36d-08d7-409f-8437-1920628e6e51",
                    "address": "test@example.com",
                    "is_verified": true,
                    "is_primary": true,
                    "created_at": "2025-01-15T13:57:56.72784Z",
                    "updated_at": "2025-01-15T13:57:56.72801Z"
                }
            ],
            "id": "42fbd0dc-28fb-4144-892c-c2c4a0f8f5d8",
            "identities": [
                {
                    "id": "b3af92c5-414c-4c6b-a3ea-82ee263badef",
                    "provider_id": "123456abcd",
                    "provider_name": "testprovider",
                    "email_id": "d31be36d-08d7-409f-8437-1920628e6e51",
                    "created_at": "2025-01-17T13:40:11Z",
                    "updated_at": "2025-01-17T13:40:13Z"
                }
            ],
            "ip_address": "127.0.0.1",
            "otp": {
                "id": "a7efd1ee-d7b2-440e-9284-625e06931745",
                "created_at": "2025-01-17T13:39:29.081428Z"
            },
            "password": {
                "id": "6ec87b0c-67db-42ef-9adb-d106734bde02",
                "created_at": "2025-01-15T13:57:56.735651Z",
                "updated_at": "2025-01-15T13:57:56.735651Z"
            },
            "updated_at": "2025-01-15T13:57:56.724255Z",
            "username": {
                "id": "61580d7d-0c11-4c25-bfca-ace21a14cc01",
                "username": "testmakker",
                "created_at": "2025-01-15T14:45:00.293001Z",
                "updated_at": "2025-01-17T13:46:41.700373Z"
            },
            "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36",
            "webauthn_credentials": [
                {
                    "id": "eaYxbrFQJjl5dW5SAr0KznEmHwAen8HUAiaKN9ijsDY",
                    "public_key": "pQECAyYgASFYIMq-SVnCDGIJjK2TAJyEQyXNtOw7x_MuEVUQuW80-AOcIlggyEcR_v5C8PuhrThwgx2urmRqviIb7dyXmGr3oyWk2rU",
                    "attestation_type": "packed",
                    "aaguid": "70a4ab68-d027-451a-9c86-3b8fd8414f68",
                    "last_used_at": "2025-01-17T12:38:28.698563Z",
                    "created_at": "2025-01-17T12:38:28.698563Z",
                    "transports": [
                        "usb"
                    ],
                    "backup_eligible": false,
                    "backup_state": false,
                    "mfa_only": true
                },
                {
                    "id": "BPtYkS1prrGu1owU3StJwWM5uYtVoD1-h4N_rPHrB84",
                    "public_key": "pQECAyYgASFYILo4i3yC0V2kciBHL96EOx08h32CXXIFnuUmggHOhkGvIlggQFIp4CeJhzGpCiTNuQQoyiKV7oMLYxM549ctLJXJkZ0",
                    "attestation_type": "packed",
                    "aaguid": "649b9062-5892-4223-832b-921c5bce5827",
                    "last_used_at": "2025-01-17T12:39:06.718171Z",
                    "created_at": "2025-01-17T12:39:06.718171Z",
                    "transports": [
                        "usb"
                    ],
                    "backup_eligible": false,
                    "backup_state": false,
                    "mfa_only": false
                }
            ]
        },
        "evt": "<string>", // the corresponding event type
        "exp": 1737118303,
        "iat": 1737118003,
        "sub": "hanko webhooks"
    }
    ```
  </Accordion>

  <Accordion title={"'user.update.email.delete' token payload properties"}>
    <ResponseField name="aud" type="string[]">
      The recipients the token is intended for
    </ResponseField>

    <ResponseField name="data" type="object">
      <Expandable>
        <ResponseField name="id" type="string">
          The ID of the user
        </ResponseField>

        <ResponseField name="created_at" type="string">
          Time of creation of the user
        </ResponseField>

        <ResponseField name="emails" type="object[]">
          <Expandable>
            <ResponseField name="id" type="string">
              The ID of the email
            </ResponseField>

            <ResponseField name="address" type="string">
              The actual email address
            </ResponseField>

            <ResponseField name="created_at" type="string">
              Time of creation of the email
            </ResponseField>

            <ResponseField name="is_primary" type="boolean">
              Indicates whether this is the primary email
            </ResponseField>

            <ResponseField name="is_verified" type="boolean">
              Indicates whether this email is verified
            </ResponseField>

            <ResponseField name="updated_at" type="string">
              Time of last update of the email
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="identities" type="object[]">
          <Expandable>
            <ResponseField name="id" type="string">
              The ID of the identity
            </ResponseField>

            <ResponseField name="provider_id" type="string">
              The ID of the user at the third party provider
            </ResponseField>

            <ResponseField name="provider_name" type="string">
              The name of the third party provider
            </ResponseField>

            <ResponseField name="email_id" type="string">
              The ID of the email the identity is related to
            </ResponseField>

            <ResponseField name="created_at" type="string">
              Time of creation of the identity
            </ResponseField>

            <ResponseField name="updated_at" type="string">
              Time of last update of the identity
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="otp" type="object">
          MFA OTP credential of the user

          <Expandable>
            <ResponseField name="id" type="string">
              ID of the OTP credential
            </ResponseField>

            <ResponseField name="created_at" type="string">
              Time of creation of the OTP credential
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="password" type="object">
          Representation of the password credential of the user

          <Expandable>
            <ResponseField name="id" type="string">
              The ID of the password credential
            </ResponseField>

            <ResponseField name="created_at" type="string">
              Time of creation of the password credential
            </ResponseField>

            <ResponseField name="updated_at" type="string">
              Time of last update of the password credential
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="updated_at" type="string">
          Time of last update of the user
        </ResponseField>

        <ResponseField name="username" type="object">
          The username of the user

          <Expandable>
            <ResponseField name="id" type="string">
              The ID of the username
            </ResponseField>

            <ResponseField name="username" type="string">
              The actual username of the user
            </ResponseField>

            <ResponseField name="created_at" type="string">
              Time of creation of the username
            </ResponseField>

            <ResponseField name="updated_at" type="string">
              Time of last update of the username
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="webauthn_credentials" type="object">
          Registered WebAuthn credentials (passkeys and security keys) of the user

          <Expandable>
            <ResponseField name="aaguid" type="string">
              The ID authenticator that created the credential
            </ResponseField>

            <ResponseField name="attestation_type" type="string">
              Format in which the signature is represented and the various contextual
              bindings are incorporated into the attestation statement by the authenticator
            </ResponseField>

            <ResponseField name="backup_eligible" type="string">
              Indicates whether the credential may be backed up in some fashion such that they may become present
              on an authenticator other than their generating authenticator
            </ResponseField>

            <ResponseField name="backup_state" type="string">
              Indicates whether this credential is backed up or not
            </ResponseField>

            <ResponseField name="created_at" type="string">
              The time of creation of the credential
            </ResponseField>

            <ResponseField name="id" type="string">
              The ID of the credential
            </ResponseField>

            <ResponseField name="last_used_at" type="string">
              Indicates when the credential was lst used
            </ResponseField>

            <ResponseField name="public_key" type="string">
              The public key of the credential (Base64URL string)
            </ResponseField>

            <ResponseField name="transports" type="string[]">
              Communication methods/protocols used to create the credential
            </ResponseField>

            <ResponseField name="mfa_only" type="string">
              Indicates whether this is an MFA credential (security key) or a first factor credential
              (passkey)
            </ResponseField>
          </Expandable>
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="evt" type="string">
      The event that triggered the webhook containing this data
    </ResponseField>

    <ResponseField name="exp" type="number">
      The expiration date of the token
    </ResponseField>

    <ResponseField name="iat" type="number">
      The time at which the token was issued
    </ResponseField>

    <ResponseField name="sub" type="string" default="hanko webhooks" />
  </Accordion>
</AccordionGroup>

#### user.update.email.primary

This event is triggered when a user's email is set as the primary email.

<AccordionGroup>
  <Accordion title={"'user.update.email.primary' token payload example"}>
    ```json theme={null}
    {
        "aud": [
            "Test Service ABC"
        ],
        "data": {
            "created_at": "2025-01-15T12:57:56.724052Z",
            "emails": [
                {
                    "id": "d31be36d-08d7-409f-8437-1920628e6e51",
                    "address": "test@example.com",
                    "is_verified": true,
                    "is_primary": true,
                    "created_at": "2025-01-15T13:57:56.72784Z",
                    "updated_at": "2025-01-15T13:57:56.72801Z"
                }
            ],
            "id": "42fbd0dc-28fb-4144-892c-c2c4a0f8f5d8",
            "identities": [
                {
                    "id": "b3af92c5-414c-4c6b-a3ea-82ee263badef",
                    "provider_id": "123456abcd",
                    "provider_name": "testprovider",
                    "email_id": "d31be36d-08d7-409f-8437-1920628e6e51",
                    "created_at": "2025-01-17T13:40:11Z",
                    "updated_at": "2025-01-17T13:40:13Z"
                }
            ],
            "ip_address": "127.0.0.1",
            "otp": {
                "id": "a7efd1ee-d7b2-440e-9284-625e06931745",
                "created_at": "2025-01-17T13:39:29.081428Z"
            },
            "password": {
                "id": "6ec87b0c-67db-42ef-9adb-d106734bde02",
                "created_at": "2025-01-15T13:57:56.735651Z",
                "updated_at": "2025-01-15T13:57:56.735651Z"
            },
            "updated_at": "2025-01-15T13:57:56.724255Z",
            "username": {
                "id": "61580d7d-0c11-4c25-bfca-ace21a14cc01",
                "username": "testmakker",
                "created_at": "2025-01-15T14:45:00.293001Z",
                "updated_at": "2025-01-17T13:46:41.700373Z"
            },
            "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36",
            "webauthn_credentials": [
                {
                    "id": "eaYxbrFQJjl5dW5SAr0KznEmHwAen8HUAiaKN9ijsDY",
                    "public_key": "pQECAyYgASFYIMq-SVnCDGIJjK2TAJyEQyXNtOw7x_MuEVUQuW80-AOcIlggyEcR_v5C8PuhrThwgx2urmRqviIb7dyXmGr3oyWk2rU",
                    "attestation_type": "packed",
                    "aaguid": "70a4ab68-d027-451a-9c86-3b8fd8414f68",
                    "last_used_at": "2025-01-17T12:38:28.698563Z",
                    "created_at": "2025-01-17T12:38:28.698563Z",
                    "transports": [
                        "usb"
                    ],
                    "backup_eligible": false,
                    "backup_state": false,
                    "mfa_only": true
                },
                {
                    "id": "BPtYkS1prrGu1owU3StJwWM5uYtVoD1-h4N_rPHrB84",
                    "public_key": "pQECAyYgASFYILo4i3yC0V2kciBHL96EOx08h32CXXIFnuUmggHOhkGvIlggQFIp4CeJhzGpCiTNuQQoyiKV7oMLYxM549ctLJXJkZ0",
                    "attestation_type": "packed",
                    "aaguid": "649b9062-5892-4223-832b-921c5bce5827",
                    "last_used_at": "2025-01-17T12:39:06.718171Z",
                    "created_at": "2025-01-17T12:39:06.718171Z",
                    "transports": [
                        "usb"
                    ],
                    "backup_eligible": false,
                    "backup_state": false,
                    "mfa_only": false
                }
            ]
        },
        "evt": "<string>", // the corresponding event type
        "exp": 1737118303,
        "iat": 1737118003,
        "sub": "hanko webhooks"
    }
    ```
  </Accordion>

  <Accordion title={"'user.update.email.primary' token payload properties"}>
    <ResponseField name="aud" type="string[]">
      The recipients the token is intended for
    </ResponseField>

    <ResponseField name="data" type="object">
      <Expandable>
        <ResponseField name="id" type="string">
          The ID of the user
        </ResponseField>

        <ResponseField name="created_at" type="string">
          Time of creation of the user
        </ResponseField>

        <ResponseField name="emails" type="object[]">
          <Expandable>
            <ResponseField name="id" type="string">
              The ID of the email
            </ResponseField>

            <ResponseField name="address" type="string">
              The actual email address
            </ResponseField>

            <ResponseField name="created_at" type="string">
              Time of creation of the email
            </ResponseField>

            <ResponseField name="is_primary" type="boolean">
              Indicates whether this is the primary email
            </ResponseField>

            <ResponseField name="is_verified" type="boolean">
              Indicates whether this email is verified
            </ResponseField>

            <ResponseField name="updated_at" type="string">
              Time of last update of the email
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="identities" type="object[]">
          <Expandable>
            <ResponseField name="id" type="string">
              The ID of the identity
            </ResponseField>

            <ResponseField name="provider_id" type="string">
              The ID of the user at the third party provider
            </ResponseField>

            <ResponseField name="provider_name" type="string">
              The name of the third party provider
            </ResponseField>

            <ResponseField name="email_id" type="string">
              The ID of the email the identity is related to
            </ResponseField>

            <ResponseField name="created_at" type="string">
              Time of creation of the identity
            </ResponseField>

            <ResponseField name="updated_at" type="string">
              Time of last update of the identity
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="otp" type="object">
          MFA OTP credential of the user

          <Expandable>
            <ResponseField name="id" type="string">
              ID of the OTP credential
            </ResponseField>

            <ResponseField name="created_at" type="string">
              Time of creation of the OTP credential
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="password" type="object">
          Representation of the password credential of the user

          <Expandable>
            <ResponseField name="id" type="string">
              The ID of the password credential
            </ResponseField>

            <ResponseField name="created_at" type="string">
              Time of creation of the password credential
            </ResponseField>

            <ResponseField name="updated_at" type="string">
              Time of last update of the password credential
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="updated_at" type="string">
          Time of last update of the user
        </ResponseField>

        <ResponseField name="username" type="object">
          The username of the user

          <Expandable>
            <ResponseField name="id" type="string">
              The ID of the username
            </ResponseField>

            <ResponseField name="username" type="string">
              The actual username of the user
            </ResponseField>

            <ResponseField name="created_at" type="string">
              Time of creation of the username
            </ResponseField>

            <ResponseField name="updated_at" type="string">
              Time of last update of the username
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="webauthn_credentials" type="object">
          Registered WebAuthn credentials (passkeys and security keys) of the user

          <Expandable>
            <ResponseField name="aaguid" type="string">
              The ID authenticator that created the credential
            </ResponseField>

            <ResponseField name="attestation_type" type="string">
              Format in which the signature is represented and the various contextual
              bindings are incorporated into the attestation statement by the authenticator
            </ResponseField>

            <ResponseField name="backup_eligible" type="string">
              Indicates whether the credential may be backed up in some fashion such that they may become present
              on an authenticator other than their generating authenticator
            </ResponseField>

            <ResponseField name="backup_state" type="string">
              Indicates whether this credential is backed up or not
            </ResponseField>

            <ResponseField name="created_at" type="string">
              The time of creation of the credential
            </ResponseField>

            <ResponseField name="id" type="string">
              The ID of the credential
            </ResponseField>

            <ResponseField name="last_used_at" type="string">
              Indicates when the credential was lst used
            </ResponseField>

            <ResponseField name="public_key" type="string">
              The public key of the credential (Base64URL string)
            </ResponseField>

            <ResponseField name="transports" type="string[]">
              Communication methods/protocols used to create the credential
            </ResponseField>

            <ResponseField name="mfa_only" type="string">
              Indicates whether this is an MFA credential (security key) or a first factor credential
              (passkey)
            </ResponseField>
          </Expandable>
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="evt" type="string">
      The event that triggered the webhook containing this data
    </ResponseField>

    <ResponseField name="exp" type="number">
      The expiration date of the token
    </ResponseField>

    <ResponseField name="iat" type="number">
      The time at which the token was issued
    </ResponseField>

    <ResponseField name="sub" type="string" default="hanko webhooks" />
  </Accordion>
</AccordionGroup>

#### user.update.password.update

This event is triggered when a user updates their password through the profile.

<AccordionGroup>
  <Accordion title={"'user.update.password.update' token payload example"}>
    ```json theme={null}
    {
        "aud": [
            "Test Service ABC"
        ],
        "data": {
            "created_at": "2025-01-15T12:57:56.724052Z",
            "emails": [
                {
                    "id": "d31be36d-08d7-409f-8437-1920628e6e51",
                    "address": "test@example.com",
                    "is_verified": true,
                    "is_primary": true,
                    "created_at": "2025-01-15T13:57:56.72784Z",
                    "updated_at": "2025-01-15T13:57:56.72801Z"
                }
            ],
            "id": "42fbd0dc-28fb-4144-892c-c2c4a0f8f5d8",
            "identities": [
                {
                    "id": "b3af92c5-414c-4c6b-a3ea-82ee263badef",
                    "provider_id": "123456abcd",
                    "provider_name": "testprovider",
                    "email_id": "d31be36d-08d7-409f-8437-1920628e6e51",
                    "created_at": "2025-01-17T13:40:11Z",
                    "updated_at": "2025-01-17T13:40:13Z"
                }
            ],
            "ip_address": "127.0.0.1",
            "otp": {
                "id": "a7efd1ee-d7b2-440e-9284-625e06931745",
                "created_at": "2025-01-17T13:39:29.081428Z"
            },
            "password": {
                "id": "6ec87b0c-67db-42ef-9adb-d106734bde02",
                "created_at": "2025-01-15T13:57:56.735651Z",
                "updated_at": "2025-01-15T13:57:56.735651Z"
            },
            "updated_at": "2025-01-15T13:57:56.724255Z",
            "username": {
                "id": "61580d7d-0c11-4c25-bfca-ace21a14cc01",
                "username": "testmakker",
                "created_at": "2025-01-15T14:45:00.293001Z",
                "updated_at": "2025-01-17T13:46:41.700373Z"
            },
            "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36",
            "webauthn_credentials": [
                {
                    "id": "eaYxbrFQJjl5dW5SAr0KznEmHwAen8HUAiaKN9ijsDY",
                    "public_key": "pQECAyYgASFYIMq-SVnCDGIJjK2TAJyEQyXNtOw7x_MuEVUQuW80-AOcIlggyEcR_v5C8PuhrThwgx2urmRqviIb7dyXmGr3oyWk2rU",
                    "attestation_type": "packed",
                    "aaguid": "70a4ab68-d027-451a-9c86-3b8fd8414f68",
                    "last_used_at": "2025-01-17T12:38:28.698563Z",
                    "created_at": "2025-01-17T12:38:28.698563Z",
                    "transports": [
                        "usb"
                    ],
                    "backup_eligible": false,
                    "backup_state": false,
                    "mfa_only": true
                },
                {
                    "id": "BPtYkS1prrGu1owU3StJwWM5uYtVoD1-h4N_rPHrB84",
                    "public_key": "pQECAyYgASFYILo4i3yC0V2kciBHL96EOx08h32CXXIFnuUmggHOhkGvIlggQFIp4CeJhzGpCiTNuQQoyiKV7oMLYxM549ctLJXJkZ0",
                    "attestation_type": "packed",
                    "aaguid": "649b9062-5892-4223-832b-921c5bce5827",
                    "last_used_at": "2025-01-17T12:39:06.718171Z",
                    "created_at": "2025-01-17T12:39:06.718171Z",
                    "transports": [
                        "usb"
                    ],
                    "backup_eligible": false,
                    "backup_state": false,
                    "mfa_only": false
                }
            ]
        },
        "evt": "<string>", // the corresponding event type
        "exp": 1737118303,
        "iat": 1737118003,
        "sub": "hanko webhooks"
    }
    ```
  </Accordion>

  <Accordion title={"'user.update.password.update' token payload properties"}>
    <ResponseField name="aud" type="string[]">
      The recipients the token is intended for
    </ResponseField>

    <ResponseField name="data" type="object">
      <Expandable>
        <ResponseField name="id" type="string">
          The ID of the user
        </ResponseField>

        <ResponseField name="created_at" type="string">
          Time of creation of the user
        </ResponseField>

        <ResponseField name="emails" type="object[]">
          <Expandable>
            <ResponseField name="id" type="string">
              The ID of the email
            </ResponseField>

            <ResponseField name="address" type="string">
              The actual email address
            </ResponseField>

            <ResponseField name="created_at" type="string">
              Time of creation of the email
            </ResponseField>

            <ResponseField name="is_primary" type="boolean">
              Indicates whether this is the primary email
            </ResponseField>

            <ResponseField name="is_verified" type="boolean">
              Indicates whether this email is verified
            </ResponseField>

            <ResponseField name="updated_at" type="string">
              Time of last update of the email
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="identities" type="object[]">
          <Expandable>
            <ResponseField name="id" type="string">
              The ID of the identity
            </ResponseField>

            <ResponseField name="provider_id" type="string">
              The ID of the user at the third party provider
            </ResponseField>

            <ResponseField name="provider_name" type="string">
              The name of the third party provider
            </ResponseField>

            <ResponseField name="email_id" type="string">
              The ID of the email the identity is related to
            </ResponseField>

            <ResponseField name="created_at" type="string">
              Time of creation of the identity
            </ResponseField>

            <ResponseField name="updated_at" type="string">
              Time of last update of the identity
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="otp" type="object">
          MFA OTP credential of the user

          <Expandable>
            <ResponseField name="id" type="string">
              ID of the OTP credential
            </ResponseField>

            <ResponseField name="created_at" type="string">
              Time of creation of the OTP credential
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="password" type="object">
          Representation of the password credential of the user

          <Expandable>
            <ResponseField name="id" type="string">
              The ID of the password credential
            </ResponseField>

            <ResponseField name="created_at" type="string">
              Time of creation of the password credential
            </ResponseField>

            <ResponseField name="updated_at" type="string">
              Time of last update of the password credential
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="updated_at" type="string">
          Time of last update of the user
        </ResponseField>

        <ResponseField name="username" type="object">
          The username of the user

          <Expandable>
            <ResponseField name="id" type="string">
              The ID of the username
            </ResponseField>

            <ResponseField name="username" type="string">
              The actual username of the user
            </ResponseField>

            <ResponseField name="created_at" type="string">
              Time of creation of the username
            </ResponseField>

            <ResponseField name="updated_at" type="string">
              Time of last update of the username
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="webauthn_credentials" type="object">
          Registered WebAuthn credentials (passkeys and security keys) of the user

          <Expandable>
            <ResponseField name="aaguid" type="string">
              The ID authenticator that created the credential
            </ResponseField>

            <ResponseField name="attestation_type" type="string">
              Format in which the signature is represented and the various contextual
              bindings are incorporated into the attestation statement by the authenticator
            </ResponseField>

            <ResponseField name="backup_eligible" type="string">
              Indicates whether the credential may be backed up in some fashion such that they may become present
              on an authenticator other than their generating authenticator
            </ResponseField>

            <ResponseField name="backup_state" type="string">
              Indicates whether this credential is backed up or not
            </ResponseField>

            <ResponseField name="created_at" type="string">
              The time of creation of the credential
            </ResponseField>

            <ResponseField name="id" type="string">
              The ID of the credential
            </ResponseField>

            <ResponseField name="last_used_at" type="string">
              Indicates when the credential was lst used
            </ResponseField>

            <ResponseField name="public_key" type="string">
              The public key of the credential (Base64URL string)
            </ResponseField>

            <ResponseField name="transports" type="string[]">
              Communication methods/protocols used to create the credential
            </ResponseField>

            <ResponseField name="mfa_only" type="string">
              Indicates whether this is an MFA credential (security key) or a first factor credential
              (passkey)
            </ResponseField>
          </Expandable>
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="evt" type="string">
      The event that triggered the webhook containing this data
    </ResponseField>

    <ResponseField name="exp" type="number">
      The expiration date of the token
    </ResponseField>

    <ResponseField name="iat" type="number">
      The time at which the token was issued
    </ResponseField>

    <ResponseField name="sub" type="string" default="hanko webhooks" />
  </Accordion>
</AccordionGroup>

#### user.update.username

Subscribing to this event implies subscription to the following events:
[`user.update.username.create`](#user-update-username-create),
[`user.update.username.delete`](#user-update-username-delete),
[`user.update.username.update`](#user-update-username-update)

#### user.update.username.create

This event is triggered when a username is created for a user.

<AccordionGroup>
  <Accordion title={"'user.update.username.create' token payload example"}>
    ```json theme={null}
    {
        "aud": [
            "Test Service ABC"
        ],
        "data": {
            "created_at": "2025-01-15T12:57:56.724052Z",
            "emails": [
                {
                    "id": "d31be36d-08d7-409f-8437-1920628e6e51",
                    "address": "test@example.com",
                    "is_verified": true,
                    "is_primary": true,
                    "created_at": "2025-01-15T13:57:56.72784Z",
                    "updated_at": "2025-01-15T13:57:56.72801Z"
                }
            ],
            "id": "42fbd0dc-28fb-4144-892c-c2c4a0f8f5d8",
            "identities": [
                {
                    "id": "b3af92c5-414c-4c6b-a3ea-82ee263badef",
                    "provider_id": "123456abcd",
                    "provider_name": "testprovider",
                    "email_id": "d31be36d-08d7-409f-8437-1920628e6e51",
                    "created_at": "2025-01-17T13:40:11Z",
                    "updated_at": "2025-01-17T13:40:13Z"
                }
            ],
            "ip_address": "127.0.0.1",
            "otp": {
                "id": "a7efd1ee-d7b2-440e-9284-625e06931745",
                "created_at": "2025-01-17T13:39:29.081428Z"
            },
            "password": {
                "id": "6ec87b0c-67db-42ef-9adb-d106734bde02",
                "created_at": "2025-01-15T13:57:56.735651Z",
                "updated_at": "2025-01-15T13:57:56.735651Z"
            },
            "updated_at": "2025-01-15T13:57:56.724255Z",
            "username": {
                "id": "61580d7d-0c11-4c25-bfca-ace21a14cc01",
                "username": "testmakker",
                "created_at": "2025-01-15T14:45:00.293001Z",
                "updated_at": "2025-01-17T13:46:41.700373Z"
            },
            "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36",
            "webauthn_credentials": [
                {
                    "id": "eaYxbrFQJjl5dW5SAr0KznEmHwAen8HUAiaKN9ijsDY",
                    "public_key": "pQECAyYgASFYIMq-SVnCDGIJjK2TAJyEQyXNtOw7x_MuEVUQuW80-AOcIlggyEcR_v5C8PuhrThwgx2urmRqviIb7dyXmGr3oyWk2rU",
                    "attestation_type": "packed",
                    "aaguid": "70a4ab68-d027-451a-9c86-3b8fd8414f68",
                    "last_used_at": "2025-01-17T12:38:28.698563Z",
                    "created_at": "2025-01-17T12:38:28.698563Z",
                    "transports": [
                        "usb"
                    ],
                    "backup_eligible": false,
                    "backup_state": false,
                    "mfa_only": true
                },
                {
                    "id": "BPtYkS1prrGu1owU3StJwWM5uYtVoD1-h4N_rPHrB84",
                    "public_key": "pQECAyYgASFYILo4i3yC0V2kciBHL96EOx08h32CXXIFnuUmggHOhkGvIlggQFIp4CeJhzGpCiTNuQQoyiKV7oMLYxM549ctLJXJkZ0",
                    "attestation_type": "packed",
                    "aaguid": "649b9062-5892-4223-832b-921c5bce5827",
                    "last_used_at": "2025-01-17T12:39:06.718171Z",
                    "created_at": "2025-01-17T12:39:06.718171Z",
                    "transports": [
                        "usb"
                    ],
                    "backup_eligible": false,
                    "backup_state": false,
                    "mfa_only": false
                }
            ]
        },
        "evt": "<string>", // the corresponding event type
        "exp": 1737118303,
        "iat": 1737118003,
        "sub": "hanko webhooks"
    }
    ```
  </Accordion>

  <Accordion title={"'user.update.username.create' token payload properties"}>
    <ResponseField name="aud" type="string[]">
      The recipients the token is intended for
    </ResponseField>

    <ResponseField name="data" type="object">
      <Expandable>
        <ResponseField name="id" type="string">
          The ID of the user
        </ResponseField>

        <ResponseField name="created_at" type="string">
          Time of creation of the user
        </ResponseField>

        <ResponseField name="emails" type="object[]">
          <Expandable>
            <ResponseField name="id" type="string">
              The ID of the email
            </ResponseField>

            <ResponseField name="address" type="string">
              The actual email address
            </ResponseField>

            <ResponseField name="created_at" type="string">
              Time of creation of the email
            </ResponseField>

            <ResponseField name="is_primary" type="boolean">
              Indicates whether this is the primary email
            </ResponseField>

            <ResponseField name="is_verified" type="boolean">
              Indicates whether this email is verified
            </ResponseField>

            <ResponseField name="updated_at" type="string">
              Time of last update of the email
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="identities" type="object[]">
          <Expandable>
            <ResponseField name="id" type="string">
              The ID of the identity
            </ResponseField>

            <ResponseField name="provider_id" type="string">
              The ID of the user at the third party provider
            </ResponseField>

            <ResponseField name="provider_name" type="string">
              The name of the third party provider
            </ResponseField>

            <ResponseField name="email_id" type="string">
              The ID of the email the identity is related to
            </ResponseField>

            <ResponseField name="created_at" type="string">
              Time of creation of the identity
            </ResponseField>

            <ResponseField name="updated_at" type="string">
              Time of last update of the identity
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="otp" type="object">
          MFA OTP credential of the user

          <Expandable>
            <ResponseField name="id" type="string">
              ID of the OTP credential
            </ResponseField>

            <ResponseField name="created_at" type="string">
              Time of creation of the OTP credential
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="password" type="object">
          Representation of the password credential of the user

          <Expandable>
            <ResponseField name="id" type="string">
              The ID of the password credential
            </ResponseField>

            <ResponseField name="created_at" type="string">
              Time of creation of the password credential
            </ResponseField>

            <ResponseField name="updated_at" type="string">
              Time of last update of the password credential
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="updated_at" type="string">
          Time of last update of the user
        </ResponseField>

        <ResponseField name="username" type="object">
          The username of the user

          <Expandable>
            <ResponseField name="id" type="string">
              The ID of the username
            </ResponseField>

            <ResponseField name="username" type="string">
              The actual username of the user
            </ResponseField>

            <ResponseField name="created_at" type="string">
              Time of creation of the username
            </ResponseField>

            <ResponseField name="updated_at" type="string">
              Time of last update of the username
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="webauthn_credentials" type="object">
          Registered WebAuthn credentials (passkeys and security keys) of the user

          <Expandable>
            <ResponseField name="aaguid" type="string">
              The ID authenticator that created the credential
            </ResponseField>

            <ResponseField name="attestation_type" type="string">
              Format in which the signature is represented and the various contextual
              bindings are incorporated into the attestation statement by the authenticator
            </ResponseField>

            <ResponseField name="backup_eligible" type="string">
              Indicates whether the credential may be backed up in some fashion such that they may become present
              on an authenticator other than their generating authenticator
            </ResponseField>

            <ResponseField name="backup_state" type="string">
              Indicates whether this credential is backed up or not
            </ResponseField>

            <ResponseField name="created_at" type="string">
              The time of creation of the credential
            </ResponseField>

            <ResponseField name="id" type="string">
              The ID of the credential
            </ResponseField>

            <ResponseField name="last_used_at" type="string">
              Indicates when the credential was lst used
            </ResponseField>

            <ResponseField name="public_key" type="string">
              The public key of the credential (Base64URL string)
            </ResponseField>

            <ResponseField name="transports" type="string[]">
              Communication methods/protocols used to create the credential
            </ResponseField>

            <ResponseField name="mfa_only" type="string">
              Indicates whether this is an MFA credential (security key) or a first factor credential
              (passkey)
            </ResponseField>
          </Expandable>
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="evt" type="string">
      The event that triggered the webhook containing this data
    </ResponseField>

    <ResponseField name="exp" type="number">
      The expiration date of the token
    </ResponseField>

    <ResponseField name="iat" type="number">
      The time at which the token was issued
    </ResponseField>

    <ResponseField name="sub" type="string" default="hanko webhooks" />
  </Accordion>
</AccordionGroup>

#### user.update.username.delete

This event is triggered when a user's username is deleted.

<AccordionGroup>
  <Accordion title={"'user.update.username.delete' token payload example"}>
    ```json theme={null}
    {
        "aud": [
            "Test Service ABC"
        ],
        "data": {
            "created_at": "2025-01-15T12:57:56.724052Z",
            "emails": [
                {
                    "id": "d31be36d-08d7-409f-8437-1920628e6e51",
                    "address": "test@example.com",
                    "is_verified": true,
                    "is_primary": true,
                    "created_at": "2025-01-15T13:57:56.72784Z",
                    "updated_at": "2025-01-15T13:57:56.72801Z"
                }
            ],
            "id": "42fbd0dc-28fb-4144-892c-c2c4a0f8f5d8",
            "identities": [
                {
                    "id": "b3af92c5-414c-4c6b-a3ea-82ee263badef",
                    "provider_id": "123456abcd",
                    "provider_name": "testprovider",
                    "email_id": "d31be36d-08d7-409f-8437-1920628e6e51",
                    "created_at": "2025-01-17T13:40:11Z",
                    "updated_at": "2025-01-17T13:40:13Z"
                }
            ],
            "ip_address": "127.0.0.1",
            "otp": {
                "id": "a7efd1ee-d7b2-440e-9284-625e06931745",
                "created_at": "2025-01-17T13:39:29.081428Z"
            },
            "password": {
                "id": "6ec87b0c-67db-42ef-9adb-d106734bde02",
                "created_at": "2025-01-15T13:57:56.735651Z",
                "updated_at": "2025-01-15T13:57:56.735651Z"
            },
            "updated_at": "2025-01-15T13:57:56.724255Z",
            "username": {
                "id": "61580d7d-0c11-4c25-bfca-ace21a14cc01",
                "username": "testmakker",
                "created_at": "2025-01-15T14:45:00.293001Z",
                "updated_at": "2025-01-17T13:46:41.700373Z"
            },
            "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36",
            "webauthn_credentials": [
                {
                    "id": "eaYxbrFQJjl5dW5SAr0KznEmHwAen8HUAiaKN9ijsDY",
                    "public_key": "pQECAyYgASFYIMq-SVnCDGIJjK2TAJyEQyXNtOw7x_MuEVUQuW80-AOcIlggyEcR_v5C8PuhrThwgx2urmRqviIb7dyXmGr3oyWk2rU",
                    "attestation_type": "packed",
                    "aaguid": "70a4ab68-d027-451a-9c86-3b8fd8414f68",
                    "last_used_at": "2025-01-17T12:38:28.698563Z",
                    "created_at": "2025-01-17T12:38:28.698563Z",
                    "transports": [
                        "usb"
                    ],
                    "backup_eligible": false,
                    "backup_state": false,
                    "mfa_only": true
                },
                {
                    "id": "BPtYkS1prrGu1owU3StJwWM5uYtVoD1-h4N_rPHrB84",
                    "public_key": "pQECAyYgASFYILo4i3yC0V2kciBHL96EOx08h32CXXIFnuUmggHOhkGvIlggQFIp4CeJhzGpCiTNuQQoyiKV7oMLYxM549ctLJXJkZ0",
                    "attestation_type": "packed",
                    "aaguid": "649b9062-5892-4223-832b-921c5bce5827",
                    "last_used_at": "2025-01-17T12:39:06.718171Z",
                    "created_at": "2025-01-17T12:39:06.718171Z",
                    "transports": [
                        "usb"
                    ],
                    "backup_eligible": false,
                    "backup_state": false,
                    "mfa_only": false
                }
            ]
        },
        "evt": "<string>", // the corresponding event type
        "exp": 1737118303,
        "iat": 1737118003,
        "sub": "hanko webhooks"
    }
    ```
  </Accordion>

  <Accordion title={"'user.update.username.delete' token payload properties"}>
    <ResponseField name="aud" type="string[]">
      The recipients the token is intended for
    </ResponseField>

    <ResponseField name="data" type="object">
      <Expandable>
        <ResponseField name="id" type="string">
          The ID of the user
        </ResponseField>

        <ResponseField name="created_at" type="string">
          Time of creation of the user
        </ResponseField>

        <ResponseField name="emails" type="object[]">
          <Expandable>
            <ResponseField name="id" type="string">
              The ID of the email
            </ResponseField>

            <ResponseField name="address" type="string">
              The actual email address
            </ResponseField>

            <ResponseField name="created_at" type="string">
              Time of creation of the email
            </ResponseField>

            <ResponseField name="is_primary" type="boolean">
              Indicates whether this is the primary email
            </ResponseField>

            <ResponseField name="is_verified" type="boolean">
              Indicates whether this email is verified
            </ResponseField>

            <ResponseField name="updated_at" type="string">
              Time of last update of the email
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="identities" type="object[]">
          <Expandable>
            <ResponseField name="id" type="string">
              The ID of the identity
            </ResponseField>

            <ResponseField name="provider_id" type="string">
              The ID of the user at the third party provider
            </ResponseField>

            <ResponseField name="provider_name" type="string">
              The name of the third party provider
            </ResponseField>

            <ResponseField name="email_id" type="string">
              The ID of the email the identity is related to
            </ResponseField>

            <ResponseField name="created_at" type="string">
              Time of creation of the identity
            </ResponseField>

            <ResponseField name="updated_at" type="string">
              Time of last update of the identity
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="otp" type="object">
          MFA OTP credential of the user

          <Expandable>
            <ResponseField name="id" type="string">
              ID of the OTP credential
            </ResponseField>

            <ResponseField name="created_at" type="string">
              Time of creation of the OTP credential
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="password" type="object">
          Representation of the password credential of the user

          <Expandable>
            <ResponseField name="id" type="string">
              The ID of the password credential
            </ResponseField>

            <ResponseField name="created_at" type="string">
              Time of creation of the password credential
            </ResponseField>

            <ResponseField name="updated_at" type="string">
              Time of last update of the password credential
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="updated_at" type="string">
          Time of last update of the user
        </ResponseField>

        <ResponseField name="username" type="object">
          The username of the user

          <Expandable>
            <ResponseField name="id" type="string">
              The ID of the username
            </ResponseField>

            <ResponseField name="username" type="string">
              The actual username of the user
            </ResponseField>

            <ResponseField name="created_at" type="string">
              Time of creation of the username
            </ResponseField>

            <ResponseField name="updated_at" type="string">
              Time of last update of the username
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="webauthn_credentials" type="object">
          Registered WebAuthn credentials (passkeys and security keys) of the user

          <Expandable>
            <ResponseField name="aaguid" type="string">
              The ID authenticator that created the credential
            </ResponseField>

            <ResponseField name="attestation_type" type="string">
              Format in which the signature is represented and the various contextual
              bindings are incorporated into the attestation statement by the authenticator
            </ResponseField>

            <ResponseField name="backup_eligible" type="string">
              Indicates whether the credential may be backed up in some fashion such that they may become present
              on an authenticator other than their generating authenticator
            </ResponseField>

            <ResponseField name="backup_state" type="string">
              Indicates whether this credential is backed up or not
            </ResponseField>

            <ResponseField name="created_at" type="string">
              The time of creation of the credential
            </ResponseField>

            <ResponseField name="id" type="string">
              The ID of the credential
            </ResponseField>

            <ResponseField name="last_used_at" type="string">
              Indicates when the credential was lst used
            </ResponseField>

            <ResponseField name="public_key" type="string">
              The public key of the credential (Base64URL string)
            </ResponseField>

            <ResponseField name="transports" type="string[]">
              Communication methods/protocols used to create the credential
            </ResponseField>

            <ResponseField name="mfa_only" type="string">
              Indicates whether this is an MFA credential (security key) or a first factor credential
              (passkey)
            </ResponseField>
          </Expandable>
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="evt" type="string">
      The event that triggered the webhook containing this data
    </ResponseField>

    <ResponseField name="exp" type="number">
      The expiration date of the token
    </ResponseField>

    <ResponseField name="iat" type="number">
      The time at which the token was issued
    </ResponseField>

    <ResponseField name="sub" type="string" default="hanko webhooks" />
  </Accordion>
</AccordionGroup>

#### user.update.username.update

This event is triggered when a user's username is updated.

<AccordionGroup>
  <Accordion title={"'user.update.username.update' token payload example"}>
    ```json theme={null}
    {
        "aud": [
            "Test Service ABC"
        ],
        "data": {
            "created_at": "2025-01-15T12:57:56.724052Z",
            "emails": [
                {
                    "id": "d31be36d-08d7-409f-8437-1920628e6e51",
                    "address": "test@example.com",
                    "is_verified": true,
                    "is_primary": true,
                    "created_at": "2025-01-15T13:57:56.72784Z",
                    "updated_at": "2025-01-15T13:57:56.72801Z"
                }
            ],
            "id": "42fbd0dc-28fb-4144-892c-c2c4a0f8f5d8",
            "identities": [
                {
                    "id": "b3af92c5-414c-4c6b-a3ea-82ee263badef",
                    "provider_id": "123456abcd",
                    "provider_name": "testprovider",
                    "email_id": "d31be36d-08d7-409f-8437-1920628e6e51",
                    "created_at": "2025-01-17T13:40:11Z",
                    "updated_at": "2025-01-17T13:40:13Z"
                }
            ],
            "ip_address": "127.0.0.1",
            "otp": {
                "id": "a7efd1ee-d7b2-440e-9284-625e06931745",
                "created_at": "2025-01-17T13:39:29.081428Z"
            },
            "password": {
                "id": "6ec87b0c-67db-42ef-9adb-d106734bde02",
                "created_at": "2025-01-15T13:57:56.735651Z",
                "updated_at": "2025-01-15T13:57:56.735651Z"
            },
            "updated_at": "2025-01-15T13:57:56.724255Z",
            "username": {
                "id": "61580d7d-0c11-4c25-bfca-ace21a14cc01",
                "username": "testmakker",
                "created_at": "2025-01-15T14:45:00.293001Z",
                "updated_at": "2025-01-17T13:46:41.700373Z"
            },
            "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36",
            "webauthn_credentials": [
                {
                    "id": "eaYxbrFQJjl5dW5SAr0KznEmHwAen8HUAiaKN9ijsDY",
                    "public_key": "pQECAyYgASFYIMq-SVnCDGIJjK2TAJyEQyXNtOw7x_MuEVUQuW80-AOcIlggyEcR_v5C8PuhrThwgx2urmRqviIb7dyXmGr3oyWk2rU",
                    "attestation_type": "packed",
                    "aaguid": "70a4ab68-d027-451a-9c86-3b8fd8414f68",
                    "last_used_at": "2025-01-17T12:38:28.698563Z",
                    "created_at": "2025-01-17T12:38:28.698563Z",
                    "transports": [
                        "usb"
                    ],
                    "backup_eligible": false,
                    "backup_state": false,
                    "mfa_only": true
                },
                {
                    "id": "BPtYkS1prrGu1owU3StJwWM5uYtVoD1-h4N_rPHrB84",
                    "public_key": "pQECAyYgASFYILo4i3yC0V2kciBHL96EOx08h32CXXIFnuUmggHOhkGvIlggQFIp4CeJhzGpCiTNuQQoyiKV7oMLYxM549ctLJXJkZ0",
                    "attestation_type": "packed",
                    "aaguid": "649b9062-5892-4223-832b-921c5bce5827",
                    "last_used_at": "2025-01-17T12:39:06.718171Z",
                    "created_at": "2025-01-17T12:39:06.718171Z",
                    "transports": [
                        "usb"
                    ],
                    "backup_eligible": false,
                    "backup_state": false,
                    "mfa_only": false
                }
            ]
        },
        "evt": "<string>", // the corresponding event type
        "exp": 1737118303,
        "iat": 1737118003,
        "sub": "hanko webhooks"
    }
    ```
  </Accordion>

  <Accordion title={"'user.update.username.update' token payload properties"}>
    <ResponseField name="aud" type="string[]">
      The recipients the token is intended for
    </ResponseField>

    <ResponseField name="data" type="object">
      <Expandable>
        <ResponseField name="id" type="string">
          The ID of the user
        </ResponseField>

        <ResponseField name="created_at" type="string">
          Time of creation of the user
        </ResponseField>

        <ResponseField name="emails" type="object[]">
          <Expandable>
            <ResponseField name="id" type="string">
              The ID of the email
            </ResponseField>

            <ResponseField name="address" type="string">
              The actual email address
            </ResponseField>

            <ResponseField name="created_at" type="string">
              Time of creation of the email
            </ResponseField>

            <ResponseField name="is_primary" type="boolean">
              Indicates whether this is the primary email
            </ResponseField>

            <ResponseField name="is_verified" type="boolean">
              Indicates whether this email is verified
            </ResponseField>

            <ResponseField name="updated_at" type="string">
              Time of last update of the email
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="identities" type="object[]">
          <Expandable>
            <ResponseField name="id" type="string">
              The ID of the identity
            </ResponseField>

            <ResponseField name="provider_id" type="string">
              The ID of the user at the third party provider
            </ResponseField>

            <ResponseField name="provider_name" type="string">
              The name of the third party provider
            </ResponseField>

            <ResponseField name="email_id" type="string">
              The ID of the email the identity is related to
            </ResponseField>

            <ResponseField name="created_at" type="string">
              Time of creation of the identity
            </ResponseField>

            <ResponseField name="updated_at" type="string">
              Time of last update of the identity
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="otp" type="object">
          MFA OTP credential of the user

          <Expandable>
            <ResponseField name="id" type="string">
              ID of the OTP credential
            </ResponseField>

            <ResponseField name="created_at" type="string">
              Time of creation of the OTP credential
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="password" type="object">
          Representation of the password credential of the user

          <Expandable>
            <ResponseField name="id" type="string">
              The ID of the password credential
            </ResponseField>

            <ResponseField name="created_at" type="string">
              Time of creation of the password credential
            </ResponseField>

            <ResponseField name="updated_at" type="string">
              Time of last update of the password credential
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="updated_at" type="string">
          Time of last update of the user
        </ResponseField>

        <ResponseField name="username" type="object">
          The username of the user

          <Expandable>
            <ResponseField name="id" type="string">
              The ID of the username
            </ResponseField>

            <ResponseField name="username" type="string">
              The actual username of the user
            </ResponseField>

            <ResponseField name="created_at" type="string">
              Time of creation of the username
            </ResponseField>

            <ResponseField name="updated_at" type="string">
              Time of last update of the username
            </ResponseField>
          </Expandable>
        </ResponseField>

        <ResponseField name="webauthn_credentials" type="object">
          Registered WebAuthn credentials (passkeys and security keys) of the user

          <Expandable>
            <ResponseField name="aaguid" type="string">
              The ID authenticator that created the credential
            </ResponseField>

            <ResponseField name="attestation_type" type="string">
              Format in which the signature is represented and the various contextual
              bindings are incorporated into the attestation statement by the authenticator
            </ResponseField>

            <ResponseField name="backup_eligible" type="string">
              Indicates whether the credential may be backed up in some fashion such that they may become present
              on an authenticator other than their generating authenticator
            </ResponseField>

            <ResponseField name="backup_state" type="string">
              Indicates whether this credential is backed up or not
            </ResponseField>

            <ResponseField name="created_at" type="string">
              The time of creation of the credential
            </ResponseField>

            <ResponseField name="id" type="string">
              The ID of the credential
            </ResponseField>

            <ResponseField name="last_used_at" type="string">
              Indicates when the credential was lst used
            </ResponseField>

            <ResponseField name="public_key" type="string">
              The public key of the credential (Base64URL string)
            </ResponseField>

            <ResponseField name="transports" type="string[]">
              Communication methods/protocols used to create the credential
            </ResponseField>

            <ResponseField name="mfa_only" type="string">
              Indicates whether this is an MFA credential (security key) or a first factor credential
              (passkey)
            </ResponseField>
          </Expandable>
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="evt" type="string">
      The event that triggered the webhook containing this data
    </ResponseField>

    <ResponseField name="exp" type="number">
      The expiration date of the token
    </ResponseField>

    <ResponseField name="iat" type="number">
      The time at which the token was issued
    </ResponseField>

    <ResponseField name="sub" type="string" default="hanko webhooks" />
  </Accordion>
</AccordionGroup>

#### email.send

This event is triggered when an email is sent. Subscribe to this event if you want
to send customized emails instead of emails based on built-in templates.
See [Custom Emails](/guides/email-delivery/email-delivery) for more information.

<AccordionGroup>
  <Accordion title={"'email.send' token payload example"}>
    ```json theme={null}
    {
        "aud": [
            "Test Service ABC"
        ],
        "data": {
            "subject": "Use passcode 325139 to verify your email address",
            "body_plain": "Enter the following passcode to verify your email address:\n\n325139\n\nThe passcode is valid for 5 minutes.",
            "to_email_address": "test@example.com",
            "delivered_by_hanko": false,
            "language": "en",
            "type": "passcode",
            "data": {
                "service_name": "Test Service ABC",
                "otp_code": "325139",
                "ttl": 300,
                "valid_until": 1737128997
            }
        },
        "evt": "email.send",
        "exp": 1737128997,
        "iat": 1737128697,
        "sub": "hanko webhooks"
    }
    ```
  </Accordion>

  <Accordion title={"'email.send' token payload properties"}>
    <ResponseField name="aud" type="string[]">
      The recipients the token is intended for
    </ResponseField>

    <ResponseField name="data" type="object">
      <Expandable>
        <ResponseField name="subject" type="string">
          The subject line of the email
        </ResponseField>

        <ResponseField name="body_plain" type="string">
          The plain text version of the email body
        </ResponseField>

        <ResponseField name="body" type="string">
          The HTML version of the email body (nullable)
        </ResponseField>

        <ResponseField name="to_email_address" type="string">
          The recipient’s email address
        </ResponseField>

        <ResponseField name="delivered_by_hanko" type="boolean">
          Indicates whether the email was delivered by Hanko (`true`) or not (`false`).
        </ResponseField>

        <ResponseField name="accept_laguage" type="boolean">
          Deprecated, rely on `language` instead.

          The preferred language for the email content.
        </ResponseField>

        <ResponseField name="language" type="string">
          The preferred language for the email content.
        </ResponseField>

        <ResponseField name="type" type="enum<string>">
          The type of the email being sent or to be sent.

          Available options: `login`, `email_login_attempted`, `email_registration_attempted`, `email_verification`,
          `recovery`, `security_notification`
        </ResponseField>

        <ResponseField name="data" type="object">
          Additional data.

          <Expandable>
            <ResponseField name="service_name" type="string">
              The name of the service set in the Console as the project name
            </ResponseField>

            <ResponseField name="otp_code" type="string">
              The passcode the user can use to log in
            </ResponseField>

            <ResponseField name="ttl" type="number">
              The validity duration of the passcode in seconds
            </ResponseField>

            <ResponseField name="valid_until" type="number">
              The Unix timestamp indicating when the passcode expires
            </ResponseField>
          </Expandable>
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="evt" type="string">
      The event that triggered the webhook containing this data
    </ResponseField>

    <ResponseField name="exp" type="number">
      The expiration date of the token
    </ResponseField>

    <ResponseField name="iat" type="number">
      The time at which the token was issued
    </ResponseField>

    <ResponseField name="sub" type="string" default="hanko webhooks" />
  </Accordion>
</AccordionGroup>
