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

EventDescription
member.createdA member invitation was created
member.activatedA member activated their membership
member.updatedA member's details were updated
member.deletedA member was removed from the membership
member.subscription_updatedA member's subscription was created, renewed, updated, canceled, or expired

Member Statuses

StatusDescription
pendingMember has been invited but has not yet activated
activeMember 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

{
  "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": "[email protected]",
      "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
      },
      "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": "[email protected]",
        "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

{
  "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": "[email protected]",
      "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": "[email protected]",
        "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

{
  "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": "[email protected]",
      "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": "[email protected]",
        "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

{
  "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": "[email protected]",
      "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": "[email protected]",
        "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_typeTrigger
createdMembership subscription was created
renewedMembership subscription was renewed
updatedMembership subscription was updated
canceledMembership subscription was canceled
expiredMembership subscription expired or was deleted

Payload

{
  "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": "[email protected]",
      "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": "[email protected]",
        "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

FieldTypeDescription
objectstringObject type identifier, always "member"
idintegerUnique identifier for the member
statusstringMember status: "pending" or "active"
site_idintegerAssociated site ID
user_idinteger | nullUser ID of the member (null if not yet registered)
address_idinteger | nullAssociated address ID
subscription_idintegerParent membership subscription ID
invitation_emailstring | nullEmail address the invitation was sent to
first_namestring | nullMember's first name from user record (null if not yet registered)
last_namestring | nullMember's last name from user record (null if not yet registered)
subscriptionobjectParent subscription details (see Subscription Object)
planobjectSubscription plan with nested product (see Plan Object)
customerobjectSubscription owner's customer record (see Customer Object)

Subscription Object (Nested)

FieldTypeDescription
idintegerSubscription ID
object_idstring | nullExternal gateway identifier (null for Pelcro Billing Engine)
site_idintegerAssociated site ID
statusstringSubscription status
billingstringBilling interval ("month", "year", etc.)
current_period_startstringISO 8601 timestamp of current billing period start
current_period_endstringISO 8601 timestamp of current billing period end
quantityintegerSubscription quantity
cancel_at_period_endbooleanWhether subscription cancels at period end

Plan Object (Nested)

FieldTypeDescription
idintegerPlan ID
amountintegerPlan price in cents
currencystringThree-letter ISO currency code
intervalstringBilling interval ("month", "year", etc.)
interval_countintegerNumber of intervals between billings
productobjectAssociated product details
site_idsarraySite IDs where this plan is available

Customer Object (Nested)

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

FieldTypeDescription
objectstringAlways "customer"
idintegerCustomer ID
emailstringCustomer email
first_namestringCustomer first name
last_namestringCustomer last name

Previous Attributes (member.updated only)

FieldTypeDescription
(varies)(varies)Contains only the fields that changed, with their previous values. Only publishable fields are included.

Subscription Event Type (member.subscription_updated only)

ValueDescription
createdMembership subscription was created
renewedMembership subscription was renewed
updatedMembership subscription was updated
canceledMembership subscription was canceled
expiredMembership subscription expired or was deleted

Related