---
updatedAt: 2026-02-23T23:13:32.000Z
agentTools:
  projectIndex: https://docs.pelcro.com/v2.4/llms.txt
---

# Customers

Receive notifications when customers are created, updated, deleted, or perform authentication actions.

## Overview

Customer webhooks notify your application when customer accounts change or when authentication-related actions occur. Use these events to keep your systems in sync with customer data, trigger onboarding flows, and monitor account activity.

***

## Use Cases

* Sync new customer records to your CRM
* Trigger welcome emails or onboarding workflows on registration
* Update external systems when customer profiles change
* Audit account deletions for compliance
* Build custom email verification flows
* Monitor password reset and login activity

***

## Events

| Event                                                                              | Description                             |
| ---------------------------------------------------------------------------------- | --------------------------------------- |
| [`customer.created`](#customercreated)                                             | A new customer account was created      |
| [`customer.updated`](#customerupdated)                                             | A customer's profile was modified       |
| [`customer.deleted`](#customerdeleted)                                             | A customer account was deleted          |
| [`customer.email_verification_request`](#customeremailverificationrequest)         | An email verification was requested     |
| [`customer.email_verification_succeeded`](#customeremailverificationsucceeded)     | A customer verified their email         |
| [`customer.password_update.succeeded`](#customerpasswordupdatesucceeded)           | A customer changed their password       |
| [`customer.PasswordResetRequestSubmitted`](#customerpasswordresetrequestsubmitted) | A password reset was requested          |
| [`customer.passwordless_login_request`](#customerpasswordlessloginrequest)         | A passwordless login link was requested |

***

## customer.created

### Triggered When

* A new customer registers via the SDK (checkout flow or signup form)
* A customer is created via the Core API
* A customer is created during a data import via the Platform Import Tool
* A customer account is provisioned during subscription creation

**Note:** The `customer.created` payload does not include nested `subscriptions` or `addresses` since the customer was just created and has none yet.

### Payload

```json
{
  "type": "customer.created",
  "id": "evt_a1b2C3d4E5f6g7H8i9J0k1L2",
  "created": 1704067200,
  "data": {
    "object": {
      "object": "customer",
      "id": 67890,
      "balance": 0,
      "billing_email": null,
      "created": "2024-01-01T00:00:00.000000Z",
      "currency": null,
      "default_source": null,
      "delinquent": false,
      "display_name": null,
      "email": "jane.doe@example.com",
      "email_confirm": null,
      "email_hardbounce": false,
      "first_name": "Jane",
      "has_password": null,
      "language": null,
      "last_active_at": null,
      "last_login_method": null,
      "last_name": "Doe",
      "mail_marketing": null,
      "metadata": null,
      "object_id": "cust_a1b2c3d4e5f6g7h8i9j0k1l2",
      "organization": null,
      "password_last_updated_at": null,
      "phone": null,
      "phone_confirm": null,
      "salutation": null,
      "site_id": 1,
      "site_ids": [1],
      "tele_marketing": null,
      "title": null,
      "username": null
    }
  }
}
```

***

## customer.updated

### Triggered When

* A customer updates their profile via the SDK (account settings)
* A customer's profile is updated via the Core API
* An administrator edits a customer's details from the Platform
* Customer metadata is modified

**Note:** Password changes do not trigger `customer.updated` â€” they trigger `customer.password_update.succeeded` instead.

### Payload

The payload includes a `previous_attributes` object containing only the fields that changed. It also includes nested `subscriptions`, `shipping_addresses`, and `billing_addresses`.

```json
{
  "type": "customer.updated",
  "id": "evt_b2C3d4E5f6g7H8i9J0k1L2m3",
  "created": 1704153600,
  "data": {
    "object": {
      "object": "customer",
      "id": 67890,
      "balance": 0,
      "billing_addresses": {
        "object": "list",
        "data": []
      },
      "billing_email": "billing@example.com",
      "created": "2024-01-01T00:00:00.000000Z",
      "currency": "usd",
      "default_source": {
        "object": "source",
        "id": 99999,
        "object_id": "card_a1b2c3d4e5f6g7h8i9j0k1l2",
        "object_gateway": "stripe",
        "brand": "visa",
        "country": "US",
        "exp_month": 12,
        "exp_year": 2030,
        "funding": "credit",
        "last4": "4242",
        "site_ids": [1]
      },
      "delinquent": false,
      "display_name": "Jane Doe",
      "email": "jane.doe@example.com",
      "email_confirm": true,
      "email_hardbounce": false,
      "first_name": "Jane",
      "has_password": true,
      "language": "en",
      "last_active_at": 1704067200,
      "last_login_method": "email",
      "last_name": "Doe",
      "mail_marketing": true,
      "metadata": {"preferred_plan": "premium"},
      "object_id": "cust_a1b2c3d4e5f6g7h8i9j0k1l2",
      "organization": null,
      "password_last_updated_at": "2024-01-01T00:00:00.000000Z",
      "phone": "+1234567890",
      "phone_confirm": null,
      "salutation": "Ms",
      "shipping_addresses": {
        "object": "list",
        "data": [
          {
            "object": "address",
            "id": 12345,
            "city": "New York",
            "country": "US",
            "line1": "123 Main Street",
            "postal_code": "10001",
            "state": "NY",
            "type": "shipping"
          }
        ]
      },
      "site_ids": [1],
      "subscriptions": {
        "object": "list",
        "data": []
      },
      "tele_marketing": null,
      "title": null,
      "username": "janedoe"
    },
    "previous_attributes": {
      "first_name": "Janet",
      "display_name": "Janet Doe"
    }
  }
}
```

***

## customer.deleted

### Triggered When

* A customer account is deleted via the Core API
* An administrator deletes a customer from the Platform

**Note:** When a customer is deleted, the system automatically cancels all active subscriptions and removes payment sources before firing this event.

### Payload

The payload includes a `previous_attributes` object containing the fields that changed during the deletion process. It also includes the customer's `subscriptions`, `shipping_addresses`, and `billing_addresses` at the time of deletion.

```json
{
  "type": "customer.deleted",
  "id": "evt_c3D4e5F6g7H8i9J0k1L2m3N4",
  "created": 1704240000,
  "data": {
    "object": {
      "object": "customer",
      "id": 67890,
      "balance": 0,
      "billing_addresses": {
        "object": "list",
        "data": []
      },
      "billing_email": null,
      "created": "2024-01-01T00:00:00.000000Z",
      "currency": "usd",
      "default_source": null,
      "delinquent": false,
      "display_name": "Jane Doe",
      "email": "jane.doe@example.com",
      "email_confirm": true,
      "email_hardbounce": false,
      "first_name": "Jane",
      "has_password": true,
      "language": "en",
      "last_active_at": 1704067200,
      "last_login_method": "email",
      "last_name": "Doe",
      "mail_marketing": true,
      "metadata": null,
      "object_id": "cust_a1b2c3d4e5f6g7h8i9j0k1l2",
      "organization": null,
      "password_last_updated_at": "2024-01-01T00:00:00.000000Z",
      "phone": null,
      "phone_confirm": null,
      "salutation": null,
      "shipping_addresses": {
        "object": "list",
        "data": []
      },
      "site_ids": [1],
      "subscriptions": {
        "object": "list",
        "data": []
      },
      "tele_marketing": null,
      "title": null,
      "username": null
    },
    "previous_attributes": {
      "default_source": {
        "object": "source",
        "id": 99999,
        "object_id": "card_a1b2c3d4e5f6g7h8i9j0k1l2",
        "object_gateway": "stripe",
        "brand": "visa",
        "last4": "4242"
      }
    }
  }
}
```

***

## customer.email\_verification\_request

### Triggered When

* A customer registers and email verification is required by site settings
* A customer requests a new verification email

### Payload

The payload includes an `email_verify_token` field that can be used to build custom verification links.

```json
{
  "type": "customer.email_verification_request",
  "id": "evt_d4E5f6G7h8I9j0K1l2M3n4O5",
  "created": 1704067200,
  "data": {
    "object": {
      "object": "customer",
      "id": 67890,
      "balance": 0,
      "billing_email": null,
      "created": "2024-01-01T00:00:00.000000Z",
      "currency": null,
      "default_source": null,
      "delinquent": false,
      "display_name": null,
      "email": "jane.doe@example.com",
      "email_confirm": null,
      "email_hardbounce": false,
      "email_verify_token": "abc123def456ghi789jkl012mno345",
      "first_name": "Jane",
      "has_password": null,
      "language": null,
      "last_active_at": null,
      "last_login_method": null,
      "last_name": "Doe",
      "mail_marketing": null,
      "metadata": null,
      "object_id": "cust_a1b2c3d4e5f6g7h8i9j0k1l2",
      "organization": null,
      "password_last_updated_at": null,
      "phone": null,
      "phone_confirm": null,
      "salutation": null,
      "site_id": 1,
      "site_ids": [1],
      "tele_marketing": null,
      "title": null,
      "username": null
    }
  }
}
```

***

## customer.email\_verification\_succeeded

### Triggered When

* A customer successfully verifies their email by clicking the verification link

### Payload

```json
{
  "type": "customer.email_verification_succeeded",
  "id": "evt_e5F6g7H8i9J0k1L2m3N4o5P6",
  "created": 1704067200,
  "data": {
    "object": {
      "object": "customer",
      "id": 67890,
      "balance": 0,
      "billing_email": null,
      "created": "2024-01-01T00:00:00.000000Z",
      "currency": null,
      "default_source": null,
      "delinquent": false,
      "display_name": null,
      "email": "jane.doe@example.com",
      "email_confirm": true,
      "email_hardbounce": false,
      "first_name": "Jane",
      "has_password": true,
      "language": null,
      "last_active_at": null,
      "last_login_method": null,
      "last_name": "Doe",
      "mail_marketing": null,
      "metadata": null,
      "object_id": "cust_a1b2c3d4e5f6g7h8i9j0k1l2",
      "organization": null,
      "password_last_updated_at": null,
      "phone": null,
      "phone_confirm": null,
      "salutation": null,
      "site_id": 1,
      "site_ids": [1],
      "tele_marketing": null,
      "title": null,
      "username": null
    }
  }
}
```

***

## customer.password\_update.succeeded

### Triggered When

* A customer changes their password via the SDK (account settings)
* A customer sets a new password after a password reset

**Note:** This event fires instead of `customer.updated` when the password field changes.

### Payload

The payload includes a `referer` field indicating the URL where the password change was initiated. It also includes `previous_attributes` showing which fields changed.

```json
{
  "type": "customer.password_update.succeeded",
  "id": "evt_f6G7h8I9j0K1l2M3n4O5p6Q7",
  "created": 1704153600,
  "data": {
    "object": {
      "object": "customer",
      "id": 67890,
      "balance": 0,
      "billing_email": null,
      "created": "2024-01-01T00:00:00.000000Z",
      "currency": "usd",
      "default_source": null,
      "delinquent": false,
      "display_name": null,
      "email": "jane.doe@example.com",
      "email_confirm": true,
      "email_hardbounce": false,
      "first_name": "Jane",
      "has_password": true,
      "language": null,
      "last_active_at": 1704067200,
      "last_login_method": "email",
      "last_name": "Doe",
      "mail_marketing": null,
      "metadata": null,
      "object_id": "cust_a1b2c3d4e5f6g7h8i9j0k1l2",
      "organization": null,
      "password_last_updated_at": "2024-01-02T12:00:00.000000Z",
      "phone": null,
      "phone_confirm": null,
      "referer": "https://example.com/account/settings",
      "salutation": null,
      "site_ids": [1],
      "tele_marketing": null,
      "title": null,
      "username": null
    },
    "previous_attributes": {
      "password_last_updated_at": "2024-01-01T00:00:00.000000Z"
    }
  }
}
```

***

## customer.PasswordResetRequestSubmitted

### Triggered When

* A customer requests a password reset via the SDK (forgot password flow)

### Payload

The payload includes a `password_reset_token` that can be used to build custom password reset links, and a `referer` field indicating the URL where the request was initiated.

```json
{
  "type": "customer.PasswordResetRequestSubmitted",
  "id": "evt_g7H8i9J0k1L2m3N4o5P6q7R8",
  "created": 1704153600,
  "data": {
    "object": {
      "object": "customer",
      "id": 67890,
      "balance": 0,
      "billing_email": null,
      "created": "2024-01-01T00:00:00.000000Z",
      "currency": "usd",
      "default_source": null,
      "delinquent": false,
      "display_name": null,
      "email": "jane.doe@example.com",
      "email_confirm": true,
      "email_hardbounce": false,
      "first_name": "Jane",
      "has_password": true,
      "language": null,
      "last_active_at": 1704067200,
      "last_login_method": "email",
      "last_name": "Doe",
      "mail_marketing": null,
      "metadata": null,
      "object_id": "cust_a1b2c3d4e5f6g7h8i9j0k1l2",
      "organization": null,
      "password_last_updated_at": "2024-01-01T00:00:00.000000Z",
      "password_reset_token": "xyz789abc012def345ghi678jkl901",
      "phone": null,
      "phone_confirm": null,
      "referer": "https://example.com/login",
      "salutation": null,
      "site_id": 1,
      "site_ids": [1],
      "tele_marketing": null,
      "title": null,
      "username": null
    }
  }
}
```

***

## customer.passwordless\_login\_request

### Triggered When

* A customer requests a passwordless login link (magic link)

### Payload

The payload includes a `passwordless_token` for building custom magic login links and a `referer` field.

```json
{
  "type": "customer.passwordless_login_request",
  "id": "evt_h8I9j0K1l2M3n4O5p6Q7r8S9",
  "created": 1704153600,
  "data": {
    "object": {
      "object": "customer",
      "id": 67890,
      "balance": 0,
      "billing_email": null,
      "created": "2024-01-01T00:00:00.000000Z",
      "currency": "usd",
      "default_source": null,
      "delinquent": false,
      "display_name": null,
      "email": "jane.doe@example.com",
      "email_confirm": true,
      "email_hardbounce": false,
      "first_name": "Jane",
      "has_password": true,
      "language": null,
      "last_active_at": 1704067200,
      "last_login_method": "email",
      "last_name": "Doe",
      "mail_marketing": null,
      "metadata": null,
      "object_id": "cust_a1b2c3d4e5f6g7h8i9j0k1l2",
      "organization": null,
      "password_last_updated_at": "2024-01-01T00:00:00.000000Z",
      "passwordless_token": "mno345pqr678stu901vwx234yz567",
      "phone": null,
      "phone_confirm": null,
      "referer": "https://example.com/login",
      "salutation": null,
      "site_ids": [1],
      "tele_marketing": null,
      "title": null,
      "username": null
    }
  }
}
```

***

## Payload Fields

### Customer Object

| Field                      | Type    | Description                                                              |
| -------------------------- | ------- | ------------------------------------------------------------------------ |
| `object`                   | string  | Object type identifier, always `customer`                                |
| `id`                       | integer | Unique identifier for the customer                                       |
| `balance`                  | integer | Customer's account balance in cents                                      |
| `billing_email`            | string  | Billing-specific email address, if different from the main email         |
| `created`                  | string  | ISO 8601 timestamp when the customer was created                         |
| `currency`                 | string  | Three-letter ISO currency code (lowercase)                               |
| `default_source`           | object  | Customer's default payment source (see Default Source Object), or `null` |
| `delinquent`               | boolean | Whether the customer has an overdue payment                              |
| `display_name`             | string  | Customer's display name                                                  |
| `email`                    | string  | Customer's primary email address                                         |
| `email_confirm`            | boolean | Whether the customer's email is confirmed                                |
| `email_hardbounce`         | boolean | Whether the email address has a hard bounce recorded                     |
| `first_name`               | string  | Customer's first name                                                    |
| `has_password`             | boolean | Whether the customer has set a password                                  |
| `language`                 | string  | Customer's preferred language code                                       |
| `last_active_at`           | integer | Unix timestamp of the customer's last activity, or `null`                |
| `last_login_method`        | string  | Last login method used: `email`, `auth0`, `google`, or `facebook`        |
| `last_name`                | string  | Customer's last name                                                     |
| `mail_marketing`           | boolean | Whether the customer opted into email marketing                          |
| `metadata`                 | object  | Custom key-value data attached to the customer                           |
| `object_id`                | string  | External payment gateway customer identifier (e.g., Stripe `cust_...`)   |
| `organization`             | object  | Customer's organization, if any                                          |
| `password_last_updated_at` | string  | ISO 8601 timestamp when the password was last changed                    |
| `phone`                    | string  | Customer's phone number                                                  |
| `phone_confirm`            | boolean | Whether the phone number is confirmed                                    |
| `salutation`               | string  | Customer's salutation (Mr, Mrs, Ms, etc.)                                |
| `site_id`                  | integer | The site where the action occurred (only present on some events)         |
| `site_ids`                 | array   | List of all site IDs the customer belongs to                             |
| `tele_marketing`           | boolean | Whether the customer opted into telemarketing                            |
| `title`                    | string  | Customer's professional title                                            |
| `username`                 | string  | Customer's username                                                      |

### Event-Specific Fields

These fields are added by specific events and are not part of the base customer object.

| Field                  | Type   | Present In                                                                                 | Description                                        |
| ---------------------- | ------ | ------------------------------------------------------------------------------------------ | -------------------------------------------------- |
| `email_verify_token`   | string | `email_verification_request`                                                               | Token for building custom email verification links |
| `password_reset_token` | string | `PasswordResetRequestSubmitted`                                                            | Token for building custom password reset links     |
| `passwordless_token`   | string | `passwordless_login_request`                                                               | Token for building custom magic login links        |
| `referer`              | string | `password_update.succeeded`, `PasswordResetRequestSubmitted`, `passwordless_login_request` | URL where the action was initiated                 |

### Default Source Object (Nested)

Present when the customer has a default payment method on file.

| Field            | Type    | Description                                        |
| ---------------- | ------- | -------------------------------------------------- |
| `object`         | string  | Always `source`                                    |
| `id`             | integer | Payment source ID                                  |
| `object_id`      | string  | External payment gateway source identifier         |
| `object_gateway` | string  | Payment gateway name (e.g., `stripe`)              |
| `brand`          | string  | Card brand (e.g., `visa`, `mastercard`)            |
| `country`        | string  | Two-letter country code of the card issuer         |
| `exp_month`      | integer | Card expiration month                              |
| `exp_year`       | integer | Card expiration year                               |
| `funding`        | string  | Card funding type: `credit`, `debit`, or `prepaid` |
| `last4`          | string  | Last four digits of the card number                |
| `site_ids`       | array   | Site IDs associated with the source                |

### Nested Relations (customer.updated and customer.deleted only)

The `customer.updated` and `customer.deleted` events include nested lists:

| Field                | Type | Description                                       |
| -------------------- | ---- | ------------------------------------------------- |
| `subscriptions`      | list | Customer's subscriptions at the time of the event |
| `shipping_addresses` | list | Customer's shipping addresses                     |
| `billing_addresses`  | list | Customer's billing addresses                      |

Each nested list follows the standard list format:

```json
{
  "object": "list",
  "data": [...]
}
```

### Previous Attributes

Events that include `previous_attributes` (`customer.updated`, `customer.deleted`, `customer.password_update.succeeded`) provide a `previous_attributes` object at the same level as the `object` key in `data`. This object contains only the fields that changed, with their values **before** the update.

If the customer's `default_source` changed, the previous source is represented as a full source object rather than just the ID.

***

## Login Method Values

| Value      | Description                       |
| ---------- | --------------------------------- |
| `email`    | Logged in with email and password |
| `auth0`    | Logged in via Auth0               |
| `google`   | Logged in via Google              |
| `facebook` | Logged in via Facebook            |

***

## Related

* [Webhooks Overview](webhooks) - Setup, signatures, and configuration

# Sibling pages

* [Email Templates](https://docs.pelcro.com/v2.4/docs/e-mail-templates-for-webhooks.md)
* [Addresses](https://docs.pelcro.com/v2.4/docs/webhooks-addresses.md)
* [Bills](https://docs.pelcro.com/v2.4/docs/webhooks-bills.md)
* [Campaigns](https://docs.pelcro.com/v2.4/docs/webhooks-campaigns.md)
* [Charges](https://docs.pelcro.com/v2.4/docs/webhooks-charges.md)
* [Exports](https://docs.pelcro.com/v2.4/docs/webhooks-exports.md)
* [Fraud Prevention](https://docs.pelcro.com/v2.4/docs/webhooks-fraud-prevention.md)
* [Invoices](https://docs.pelcro.com/v2.4/docs/webhooks-invoices.md)
* [Members](https://docs.pelcro.com/v2.4/docs/webhooks-members.md)
* [Newsletters](https://docs.pelcro.com/v2.4/docs/webhooks-newsletters.md)
* [Orders](https://docs.pelcro.com/v2.4/docs/webhooks-orders.md)
* [Payment Methods](https://docs.pelcro.com/v2.4/docs/webhooks-payment-methods.md)
* [Plans](https://docs.pelcro.com/v2.4/docs/webhooks-plans.md)
* [Products](https://docs.pelcro.com/v2.4/docs/webhooks-products.md)
* [Subscriptions](https://docs.pelcro.com/v2.4/docs/webhooks-subscriptions.md)
* [Vendors](https://docs.pelcro.com/v2.4/docs/webhooks-vendors.md)