diamond_membership.stage_changed

Sent to the webhook endpoints subscribed to diamond_membership.stage_changed in event_types. The resource type of this event, used as the key of resource_filters, is diamond_membership.

Example body

{
  "id": "evt_01J8Z3TESTE",
  "type": "diamond_membership.stage_changed",
  "version": 1,
  "occurred_at": "2026-09-29T12:00:00Z",
  "data": {
    "diamond_id": "dmd_42",
    "from": "lead",
    "membership_id": "mbr_42",
    "reason": "Moved by the sales team",
    "to": "checkout_initiated",
    "user_id": "usr_42"
  },
  "delivery_id": "whd_01J8Z3TESTE",
  "attempt": 1
}

With payload_detail set to masked or full, the body also carries expanded with user, each in the same format as the API returns it. See API webhooks.

Fields

FieldTypeRequiredDescription
idstringyesID of the event, prefixed with evt_, as in GET /events/{event_id}. Every delivery and retry of the same event has the same ID.
typestringyesAlways diamond_membership.stage_changed.
versionintegeryesAlways 1. Version of the format of data for this event type.
occurred_atstringyesWhen the event occurred, in UTC.
dataobjectyesData of the event, in the format of its version. People are identified only by ID. The only free text is the note written by whoever operates the account (reason in certificate.revoked and diamond_membership.stage_changed), sent as written.
data.diamond_idstringyesPublic ID of the Diamond, prefixed with dmd_.
data.fromstringyesStage of the membership before the change. One of lead, class_1_not_initiated, class_1_concluded, class_2_not_initiated, class_2_concluded, class_3_not_initiated, class_3_concluded, checkout_not_initiated, checkout_initiated, checkout_abandoned, won.
data.membership_idstringyesPublic ID of the Diamond membership, prefixed with mbr_.
data.reasonstring | nullyesReason for the change of stage, as written in reason of PATCH /automations/diamond/{diamond_id}/memberships/{membership_id}. It is the only free text in event data, and it is sent as written at every payload detail level, including ids. null when the change has no written reason.
data.tostringyesStage of the membership after the change. One of lead, class_1_not_initiated, class_1_concluded, class_2_not_initiated, class_2_concluded, class_3_not_initiated, class_3_concluded, checkout_not_initiated, checkout_initiated, checkout_abandoned, won.
data.user_idstringyesPublic ID of the user, prefixed with usr_.
expandedobjectnoPresent only when the payload_detail of the endpoint is masked or full. Contains the resources the event refers to, in the same format as the API returns them, as they were when the delivery was created: a retry sends the same objects. A key is null when the resource no longer exists. In masked, personal data is masked by the rules described in payload_detail of POST /webhooks (re**@g**.com, Renan C** P**), and free text written by users is replaced with [redacted]; a masked value keeps the type of the field, but may not match its format (a masked email is not a valid address). Masked personal data is still personal data. In full, values are sent as stored.
delivery_idstringyesID of this delivery, prefixed with whd_, as in GET /webhooks/{webhook_id}/deliveries/{webhook_delivery_id}. Every retry of the delivery has the same ID.
attemptintegeryesNumber of this attempt of the delivery, starting at 1.

Your endpoint answers with any 2xx status to confirm the delivery. See Deliveries and retries.

On this page