> ## Documentation Index
> Fetch the complete documentation index at: https://rain-sandbox-trial.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# user.updated

<Update label="v1.1.0" description="minor update">
  ### statusChangeReason field added

  | Field                | Type                | Description                                                                                                                   |
  | -------------------- | ------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
  | `statusChangeReason` | `string` (optional) | Why the user's status changed. The only value currently emitted is `rain_initiated` (the change was made internally by Rain). |
</Update>

<Update label="2026-07-31" description="added the tosNotAccepted application status">
  ### New application status: `tosNotAccepted`

  `body.applicationStatus` can now be `tosNotAccepted`: the user passed identity verification, but hasn't accepted the program's terms yet. The payload shape is unchanged, and `body.applicationCompletionLink` is present so you can send the user to accept. Once they accept, a follow-up webhook reports the transition to `approved`.

  | Status           | Description                                                 |
  | ---------------- | ----------------------------------------------------------- |
  | `tosNotAccepted` | Identity verification passed; card terms acceptance pending |

  #### Example Payload (TOS Not Accepted)

  ```json theme={null}
  {
      "id": "d4e5f6a7-b8c9-0123-def0-b12345678903",
      "resource": "user",
      "action": "updated",
      "version": "1.0.0",
      "eventReceivedAt": "2026-07-31T15:30:00.000Z",
      "body": {
          "id": "user_abc123",
          "firstName": "John",
          "lastName": "Doe",
          "email": "john.doe@example.com",
          "isActive": true,
          "applicationStatus": "tosNotAccepted",
          "applicationCompletionLink": {
              "url": "https://kyc.example.com/kyc",
              "params": {
                  "userId": "user_abc123",
                  "signature": "abc123signature"
              }
          },
          "applicationReason": ""
      }
  }
  ```
</Update>

<Update label="v1.0.0" description="initial release">
  ### user.updated webhook

  Added the `user.updated` webhook. Rain triggers this webhook when a user's compliance/application status changes, such as when a KYC application is approved, denied, or requires additional information.

  #### Payload Fields

  | Field                                             | Type                | Description                                                                                                        |
  | ------------------------------------------------- | ------------------- | ------------------------------------------------------------------------------------------------------------------ |
  | `id`                                              | `string`            | Webhook ID                                                                                                         |
  | `resource`                                        | `string`            | Always `"user"`                                                                                                    |
  | `action`                                          | `string`            | Always `"updated"`                                                                                                 |
  | `version`                                         | `string`            | The webhook version                                                                                                |
  | `eventReceivedAt`                                 | `string` (optional) | ISO 8601 timestamp of when the event was received by Rain                                                          |
  | `body.id`                                         | `string`            | The user ID                                                                                                        |
  | `body.firstName`                                  | `string`            | User's first name                                                                                                  |
  | `body.lastName`                                   | `string` (optional) | User's last name                                                                                                   |
  | `body.email`                                      | `string`            | User's email                                                                                                       |
  | `body.isActive`                                   | `boolean`           | Whether the user is active                                                                                         |
  | `body.isTermsOfServiceAccepted`                   | `boolean`           | Whether the user has accepted the terms of service                                                                 |
  | `body.companyId`                                  | `string` (optional) | Company ID (for corporate users)                                                                                   |
  | `body.applicationStatus`                          | `string`            | Current application/compliance status (see values below)                                                           |
  | `body.applicationCompletionLink`                  | `object` (optional) | Link for the user to complete their application                                                                    |
  | `body.applicationCompletionLink.url`              | `string`            | The URL to complete the application                                                                                |
  | `body.applicationCompletionLink.params.userId`    | `string`            | The user ID parameter                                                                                              |
  | `body.applicationCompletionLink.params.signature` | `string` (optional) | Signature parameter for verification                                                                               |
  | `body.applicationExternalVerificationLink`        | `object` (optional) | Deprecated in favor of `applicationCompletionLink`                                                                 |
  | `body.applicationReason`                          | `string`            | Comma-separated rejection labels from the compliance provider (empty string when no rejections)                    |
  | `body.statusChangeReason`                         | `string` (optional) | Indicates the source of the user status change. Present only when a specific reason is recorded. See values below. |

  #### Application Status Values

  | Status              | Description                                                       |
  | ------------------- | ----------------------------------------------------------------- |
  | `approved`          | Application has been approved                                     |
  | `pending`           | Application is pending review                                     |
  | `needsInformation`  | Additional information is required from the user                  |
  | `needsVerification` | Additional verification is required                               |
  | `manualReview`      | Application is under manual review                                |
  | `denied`            | Application has been denied                                       |
  | `locked`            | User account is locked                                            |
  | `canceled`          | Application has been canceled                                     |
  | `notStarted`        | Application has not been started                                  |
  | `exempt`            | Application has been exempted from standard compliance processing |

  #### Status Change Reason Values

  | Value            | Description                       |
  | ---------------- | --------------------------------- |
  | `rain_initiated` | Rain initiated the status change. |

  #### Example Payload (Approved)

  ```json theme={null}
  {
      "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "resource": "user",
      "action": "updated",
      "version": "1.0.0",
      "eventReceivedAt": "2026-01-27T15:30:00.000Z",
      "body": {
          "id": "user_abc123",
          "firstName": "John",
          "lastName": "Doe",
          "email": "john.doe@example.com",
          "isActive": true,
          "isTermsOfServiceAccepted": true,
          "companyId": "company_456",
          "applicationStatus": "approved",
          "applicationReason": ""
      }
  }
  ```

  #### Example Payload (Needs Information)

  ```json theme={null}
  {
      "id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
      "resource": "user",
      "action": "updated",
      "version": "1.0.0",
      "eventReceivedAt": "2026-01-27T15:30:00.000Z",
      "body": {
          "id": "user_abc123",
          "firstName": "John",
          "lastName": "Doe",
          "email": "john.doe@example.com",
          "isActive": true,
          "isTermsOfServiceAccepted": true,
          "applicationStatus": "needsInformation",
          "applicationCompletionLink": {
              "url": "https://kyc.example.com/complete",
              "params": {
                  "userId": "user_abc123",
                  "signature": "abc123signature"
              }
          },
          "applicationExternalVerificationLink": {
              "url": "https://kyc.example.com/complete",
              "params": {
                  "userId": "user_abc123",
                  "signature": "abc123signature"
              }
          },
          "applicationReason": "documentPageMissing, badPhotoQuality"
      }
  }
  ```

  #### Example Payload (Status Changed by Rain)

  ```json theme={null}
  {
      "id": "c3d4e5f6-a7b8-9012-cdef-a12345678902",
      "resource": "user",
      "action": "updated",
      "version": "1.0.0",
      "eventReceivedAt": "2026-01-27T15:30:00.000Z",
      "body": {
          "id": "user_abc123",
          "firstName": "John",
          "lastName": "Doe",
          "email": "john.doe@example.com",
          "isActive": true,
          "isTermsOfServiceAccepted": true,
          "applicationStatus": "locked",
          "applicationReason": "",
          "statusChangeReason": "rain_initiated"
      }
  }
  ```
</Update>
