---
updatedAt: 2026-06-22T19:00:50.000Z
agentTools:
  projectIndex: https://docs.pelcro.com/llms.txt
---

# Members

Receive notifications when membership members are created, activated, updated, deleted, or when their subscription changes.

## Overview

Member webhooks notify your application when changes occur to membership members. Members are users associated with a membership subscription — they can be invited by email, activated upon login, or managed through domain/IP-based auto-enrollment.

***

## Use Cases

* Send welcome emails when new members are invited
* Grant access to content when members activate their membership
* Sync membership rosters to external systems
* Track membership seat usage and availability
* Trigger offboarding workflows when members are removed
* Update CRM records when member details change

***

## Events

| Event                                                        | Description                                                                 |
| ------------------------------------------------------------ | --------------------------------------------------------------------------- |
| [`member.created`](#membercreated)                           | A member invitation was created                                             |
| [`member.activated`](#memberactivated)                       | A member activated their membership                                         |
| [`member.updated`](#memberupdated)                           | A member's details were updated                                             |
| [`member.deleted`](#memberdeleted)                           | A member was removed from the membership                                    |
| [`member.subscription_updated`](#membersubscription_updated) | A member's subscription was created, renewed, updated, canceled, or expired |

***

## Member Statuses

| Status    | Description                                         |
| --------- | --------------------------------------------------- |
| `pending` | Member has been invited but has not yet activated   |
| `active`  | Member has activated and has full membership access |

***

## member.created

### Triggered When

* A user is invited to a membership subscription via email
* A membership subscription has domain or IP address restrictions, and a new member record is created for a matching user (dispatched alongside `member.activated` if the user is already registered)

### Payload

```json
{
  "type": "member.created",
  "id": "evt_a1b2C3d4E5f6g7H8i9J0k1L2",
  "created": 1704067200,
  "data": {
    "member": {
      "object": "member",
      "id": 150,
      "status": "pending",
      "site_id": 1,
      "user_id": null,
      "address_id": null,
      "subscription_id": 200,
      "invitation_email": "newmember@example.com",
      "first_name": null,
      "last_name": null,
      "subscription": {
        "id": 200,
        "object_id": null,
        "site_id": 1,
        "status": "active",
        "billing": "year",
        "current_period_start": "2024-01-01T00:00:00.000000Z",
        "current_period_end": "2025-01-01T00:00:00.000000Z",
        "quantity": 1,
        "cancel_at_period_end": false
      },

      "owner": {
        "first_name": "Joe",
        "last_name": "John",
        "email":"test@pelcro.com"
			},
      "plan": {
        "id": 50,
        "amount": 12000,
        "currency": "usd",
        "interval": "year",
        "interval_count": 1,
        "product": {
          "id": 10,
          "name": "Team Membership",
          "description": "Annual team membership plan"
        },
        "site_ids": [1]
      },
      "customer": {
        "object": "customer",
        "id": 67890,
        "email": "admin@example.com",
        "first_name": "John",
        "last_name": "Doe"
      }
    }
  }
}
```

> When a member is first invited, `user_id`, `first_name`, and `last_name` are typically `null` because the invited user has not yet registered or logged in. The `customer` object represents the subscription owner, not the invited member.

***

## member.activated

### Triggered When

* A user logs in or registers after receiving a membership invitation email
* A membership subscription has domain or IP address restrictions, and a matching user logs in or registers — both `member.created` and `member.activated` are dispatched
* A pending member is activated via the API

### Payload

```json
{
  "type": "member.activated",
  "id": "evt_b2C3d4E5f6g7H8i9J0k1L2m3",
  "created": 1704153600,
  "data": {
    "member": {
      "object": "member",
      "id": 150,
      "status": "active",
      "site_id": 1,
      "user_id": 12345,
      "address_id": null,
      "subscription_id": 200,
      "invitation_email": "newmember@example.com",
      "first_name": "Jane",
      "last_name": "Smith",
      "subscription": {
        "id": 200,
        "object_id": null,
        "site_id": 1,
        "status": "active",
        "billing": "year",
        "current_period_start": "2024-01-01T00:00:00.000000Z",
        "current_period_end": "2025-01-01T00:00:00.000000Z",
        "quantity": 1,
        "cancel_at_period_end": false
      },
     "owner": {
        "first_name": "Joe",
        "last_name": "John",
        "email":"test@pelcro.com"
			},
      "plan": {
        "id": 50,
        "amount": 12000,
        "currency": "usd",
        "interval": "year",
        "interval_count": 1,
        "product": {
          "id": 10,
          "name": "Team Membership",
          "description": "Annual team membership plan"
        },
        "site_ids": [1]
      },
      "customer": {
        "object": "customer",
        "id": 67890,
        "email": "admin@example.com",
        "first_name": "John",
        "last_name": "Doe"
      }
    }
  }
}
```

> Once activated, `user_id`, `first_name`, and `last_name` are populated with the member's own user record. The `customer` object still represents the subscription owner.

***

## member.updated

### Triggered When

* A member's address is updated
* A member's status changes
* Any publishable field on the member record is modified

### Payload

```json
{
  "type": "member.updated",
  "id": "evt_c3D4e5F6g7H8i9J0k1L2m3N4",
  "created": 1704240000,
  "data": {
    "member": {
      "object": "member",
      "id": 150,
      "status": "active",
      "site_id": 1,
      "user_id": 12345,
      "address_id": 500,
      "subscription_id": 200,
      "invitation_email": "newmember@example.com",
      "first_name": "Jane",
      "last_name": "Smith",
      "subscription": {
        "id": 200,
        "object_id": null,
        "site_id": 1,
        "status": "active",
        "billing": "year",
        "current_period_start": "2024-01-01T00:00:00.000000Z",
        "current_period_end": "2025-01-01T00:00:00.000000Z",
        "quantity": 1,
        "cancel_at_period_end": false
      },
      "plan": {
        "id": 50,
        "amount": 12000,
        "currency": "usd",
        "interval": "year",
        "interval_count": 1,
        "product": {
          "id": 10,
          "name": "Team Membership",
          "description": "Annual team membership plan"
        },
        "site_ids": [1]
      },
      "customer": {
        "object": "customer",
        "id": 67890,
        "email": "admin@example.com",
        "first_name": "John",
        "last_name": "Doe"
      }
    },
    "previous_attributes": {
      "address_id": null
    }
  }
}
```

> The `previous_attributes` object contains only the fields that changed, with their values **before** the update. Only publishable fields are included — internal fields are filtered out.

***

## member.deleted

### Triggered When

* A member is removed from a membership subscription
* A membership seat is revoked

> The `member.deleted` event is dispatched **before** the member record is soft-deleted, so the full member data is available in the payload.

### Payload

```json
{
  "type": "member.deleted",
  "id": "evt_d4E5f6G7h8I9j0K1l2M3n4O5",
  "created": 1704326400,
  "data": {
    "member": {
      "object": "member",
      "id": 150,
      "status": "active",
      "site_id": 1,
      "user_id": 12345,
      "address_id": 500,
      "subscription_id": 200,
      "invitation_email": "newmember@example.com",
      "first_name": "Jane",
      "last_name": "Smith",
      "subscription": {
        "id": 200,
        "object_id": null,
        "site_id": 1,
        "status": "active",
        "billing": "year",
        "current_period_start": "2024-01-01T00:00:00.000000Z",
        "current_period_end": "2025-01-01T00:00:00.000000Z",
        "quantity": 1,
        "cancel_at_period_end": false
      },
      "plan": {
        "id": 50,
        "amount": 12000,
        "currency": "usd",
        "interval": "year",
        "interval_count": 1,
        "product": {
          "id": 10,
          "name": "Team Membership",
          "description": "Annual team membership plan"
        },
        "site_ids": [1]
      },
      "customer": {
        "object": "customer",
        "id": 67890,
        "email": "admin@example.com",
        "first_name": "John",
        "last_name": "Doe"
      }
    }
  }
}
```

***

## member.subscription\_updated

### Triggered When

A subscription lifecycle event occurs on a membership subscription. One webhook is fired **per member** on the subscription. The `subscription_event_type` field indicates what happened to the subscription:

| `subscription_event_type` | Trigger                                        |
| ------------------------- | ---------------------------------------------- |
| `created`                 | Membership subscription was created            |
| `renewed`                 | Membership subscription was renewed            |
| `updated`                 | Membership subscription was updated            |
| `canceled`                | Membership subscription was canceled           |
| `expired`                 | Membership subscription expired or was deleted |

### Payload

```json
{
  "type": "member.subscription_updated",
  "id": "evt_e5F6g7H8i9J0k1L2m3N4o5P6",
  "created": 1704412800,
  "data": {
    "member": {
      "object": "member",
      "id": 150,
      "status": "active",
      "site_id": 1,
      "user_id": 12345,
      "address_id": null,
      "subscription_id": 200,
      "invitation_email": "newmember@example.com",
      "first_name": "Jane",
      "last_name": "Smith",
      "subscription": {
        "id": 200,
        "object_id": null,
        "site_id": 1,
        "status": "active",
        "billing": "year",
        "current_period_start": "2024-01-01T00:00:00.000000Z",
        "current_period_end": "2025-01-01T00:00:00.000000Z",
        "quantity": 1,
        "cancel_at_period_end": false
      },
      "plan": {
        "id": 50,
        "amount": 12000,
        "currency": "usd",
        "interval": "year",
        "interval_count": 1,
        "product": {
          "id": 10,
          "name": "Team Membership",
          "description": "Annual team membership plan"
        },
        "site_ids": [1]
      },
      "customer": {
        "object": "customer",
        "id": 67890,
        "email": "admin@example.com",
        "first_name": "John",
        "last_name": "Doe"
      }
    },
    "subscription_event_type": "renewed"
  }
}
```

> The `subscription_event_type` field is at the top level of `data`, alongside `member`. It tells you **why** this webhook was fired — which subscription lifecycle event triggered the notification. For pending members (invited but not yet registered), `user_id`, `first_name`, and `last_name` may be `null`.

***

## Payload Fields

### Member Object

| Field              | Type            | Description                                                         |
| ------------------ | --------------- | ------------------------------------------------------------------- |
| `object`           | string          | Object type identifier, always `"member"`                           |
| `id`               | integer         | Unique identifier for the member                                    |
| `status`           | string          | Member status: `"pending"` or `"active"`                            |
| `site_id`          | integer         | Associated site ID                                                  |
| `user_id`          | integer \| null | User ID of the member (`null` if not yet registered)                |
| `address_id`       | integer \| null | Associated address ID                                               |
| `subscription_id`  | integer         | Parent membership subscription ID                                   |
| `invitation_email` | string \| null  | Email address the invitation was sent to                            |
| `first_name`       | string \| null  | Member's first name from user record (`null` if not yet registered) |
| `last_name`        | string \| null  | Member's last name from user record (`null` if not yet registered)  |
| `subscription`     | object          | Parent subscription details (see Subscription Object)               |
| `plan`             | object          | Subscription plan with nested product (see Plan Object)             |
| `customer`         | object          | Subscription owner's customer record (see Customer Object)          |

### Subscription Object (Nested)

| Field                  | Type           | Description                                                                              |
| ---------------------- | -------------- | ---------------------------------------------------------------------------------------- |
| `id`                   | integer        | Subscription ID                                                                          |
| `object_id`            | string \| null | External gateway identifier (`null` for [Pelcro Billing Engine](https://docs.pelcro.com/docs/our-billing-engine)) |
| `site_id`              | integer        | Associated site ID                                                                       |
| `status`               | string         | Subscription status                                                                      |
| `billing`              | string         | Billing interval (`"month"`, `"year"`, etc.)                                             |
| `current_period_start` | string         | ISO 8601 timestamp of current billing period start                                       |
| `current_period_end`   | string         | ISO 8601 timestamp of current billing period end                                         |
| `quantity`             | integer        | Subscription quantity                                                                    |
| `cancel_at_period_end` | boolean        | Whether subscription cancels at period end                                               |

### Plan Object (Nested)

| Field            | Type    | Description                                  |
| ---------------- | ------- | -------------------------------------------- |
| `id`             | integer | Plan ID                                      |
| `amount`         | integer | Plan price in cents                          |
| `currency`       | string  | Three-letter ISO currency code               |
| `interval`       | string  | Billing interval (`"month"`, `"year"`, etc.) |
| `interval_count` | integer | Number of intervals between billings         |
| `product`        | object  | Associated product details                   |
| `site_ids`       | array   | Site IDs where this plan is available        |

### Customer Object (Nested)

The `customer` represents the **subscription owner**, not the invited member.

| Field        | Type    | Description         |
| ------------ | ------- | ------------------- |
| `object`     | string  | Always `"customer"` |
| `id`         | integer | Customer ID         |
| `email`      | string  | Customer email      |
| `first_name` | string  | Customer first name |
| `last_name`  | string  | Customer last name  |

### Previous Attributes (member.updated only)

| Field      | Type       | Description                                                                                                  |
| ---------- | ---------- | ------------------------------------------------------------------------------------------------------------ |
| *(varies)* | *(varies)* | Contains only the fields that changed, with their **previous** values. Only publishable fields are included. |

### Subscription Event Type (member.subscription\_updated only)

| Value      | Description                                    |
| ---------- | ---------------------------------------------- |
| `created`  | Membership subscription was created            |
| `renewed`  | Membership subscription was renewed            |
| `updated`  | Membership subscription was updated            |
| `canceled` | Membership subscription was canceled           |
| `expired`  | Membership subscription expired or was deleted |

***

## Related

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

<br />

# Sibling pages

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