Webhooks

Want code free webhooks? See how to use Memberful with Zapier.

Webhooks notify your site or service when Members, Subscriptions, Orders, Plans, or Downloads change in Memberful. Create and manage webhooks from Settings → Integrate → Webhooks in your Memberful dashboard. You can use these webhooks to react to the change and create an account or sync data to your external application.

Memberful webhook "pings" are sent as POST requests with a JSON payload. You should ensure that the URL the webhook pings only responds to POST requests, and always fetches the latest copy of the order/member/plan/download from Memberful, so as to avoid any issues with the order of pings.

If a webhook ping does not receive a response code in the 2XX range (i.e. success), then the ping will be retried with exponential delay, until a response code in the 2xx range is returned. If we detect your webhook endpoint is not working for more than 2 days, we notify you and give you 3 days to fix the problem before it is automatically deleted.

Member events

Members sign up for plans and are managed from your dashboard.

member_signup

Sent when a member account is created.

 {
  "event": "member_signup",
  "member": {
    "address": {
      "street": "Street",
      "city": "City",
      "postal_code": "Postal code",
      "country": "City"
    },
    "created_at": 1513113157,
    "credit_card": {
      "exp_month": 1,
      "exp_year": 2040
    },
    "custom_field": "Custom field value",
    "email": "john.doe@example.com",
    "first_name": "John",
    "full_name": "John Doe",
    "id": 0,
    "last_name": "Doe",
    "phone_number": "555-12345",
    "stripe_customer_id": "cus_00000",
    "tracking_params": {
    },
    "unrestricted_access": false,
    "username": "john_doe"
  }
}

member_updated

Sent when a member's profile information is updated.

 {
  "event": "member_updated",
  "member": {
    "address": {
      "street": "Street",
      "city": "City",
      "postal_code": "Postal code",
      "country": "City"
    },
    "created_at": 1513113157,
    "credit_card": {
      "exp_month": 1,
      "exp_year": 2040
    },
    "custom_field": "Custom field value",
    "email": "john.doe@example.com",
    "first_name": "John",
    "full_name": "John Doe",
    "id": 0,
    "last_name": "Doe",
    "phone_number": "555-12345",
    "stripe_customer_id": "cus_00000",
    "tracking_params": {
    },
    "unrestricted_access": false,
    "username": "john_doe"
  },
  "changed": {
    "email": [
      "old_email@example.com",
      "john.doe@example.com"
    ]
  }
}

member.deleted

Sent when a member is deleted.

 {
  "event": "member.deleted",
  "member": {
    "custom_field": "An ordinary guy",
    "deleted": true,
    "email": "john.doe@example.com",
    "full_name": "John Doe",
    "id": 0
  }
}

Subscription events

Member's purchase and own subscriptions to plans.

subscription.updated

Sent when a member's subscription is updated.

 {
  "event": "subscription.updated",
  "subscription": {
    "active": true,
    "autorenew": true,
    "created_at": 1402281249,
    "expires_at": 1433817249,
    "id": 1,
    "member": {
      "email": "john.doe@example.com",
      "full_name": "John Doe",
      "id": 0,
      "stripe_customer_id": "cus_00000",
      "tracking_params": {
      },
      "unrestricted_access": false,
      "username": "john_doe"
    },
    "subscription_plan": {
      "id": 0,
      "interval_count": 1,
      "interval_unit": "month",
      "name": "Sample plan",
      "price_cents": 100000000,
      "slug": "0-sample-plan"
    },
    "trial_end_at": null,
    "trial_start_at": null
  }
}

subscription.renewed

Sent when a member's subscription is renewed.

 {
  "event": "subscription.renewed",
  "subscription": {
    "active": true,
    "autorenew": true,
    "created_at": 1402281249,
    "expires_at": 1433817249,
    "id": 1,
    "member": {
      "email": "john.doe@example.com",
      "full_name": "John Doe",
      "id": 0,
      "stripe_customer_id": "cus_00000",
      "tracking_params": {
      },
      "unrestricted_access": false,
      "username": "john_doe"
    },
    "subscription_plan": {
      "id": 0,
      "interval_count": 1,
      "interval_unit": "month",
      "name": "Sample plan",
      "price_cents": 100000000,
      "slug": "0-sample-plan"
    },
    "trial_end_at": null,
    "trial_start_at": null
  }
}

subscription.activated

Sent when a suspended order is marked completed by staff and a member's subscription becomes active again.

 {
  "event": "subscription.activated",
  "subscription": {
    "active": true,
    "autorenew": true,
    "created_at": 1402281249,
    "expires_at": 1433817249,
    "id": 1,
    "member": {
      "email": "john.doe@example.com",
      "full_name": "John Doe",
      "id": 0,
      "stripe_customer_id": "cus_00000",
      "tracking_params": {
      },
      "unrestricted_access": false,
      "username": "john_doe"
    },
    "subscription_plan": {
      "id": 0,
      "interval_count": 1,
      "interval_unit": "month",
      "name": "Sample plan",
      "price_cents": 100000000,
      "slug": "0-sample-plan"
    },
    "trial_end_at": null,
    "trial_start_at": null
  }
}

subscription.deactivated

Sent when a member's subscription fails to renew, expires, or becomes inactive.

 {
  "event": "subscription.deactivated",
  "subscription": {
    "active": false,
    "autorenew": true,
    "created_at": 1402281249,
    "expires_at": 1433817249,
    "id": 1,
    "member": {
      "email": "john.doe@example.com",
      "full_name": "John Doe",
      "id": 0,
      "stripe_customer_id": "cus_00000",
      "tracking_params": {
      },
      "unrestricted_access": false,
      "username": "john_doe"
    },
    "subscription_plan": {
      "id": 0,
      "interval_count": 1,
      "interval_unit": "month",
      "name": "Sample plan",
      "price_cents": 100000000,
      "slug": "0-sample-plan"
    },
    "trial_end_at": null,
    "trial_start_at": null
  }
}

subscription.deleted

Sent when a member's subscription is deleted.

 {
  "event": "subscription.deleted",
  "subscription": {
    "active": true,
    "autorenew": true,
    "created_at": 1402281249,
    "expires_at": 1433817249,
    "id": 1,
    "member": {
      "email": "john.doe@example.com",
      "full_name": "John Doe",
      "id": 0,
      "stripe_customer_id": "cus_00000",
      "tracking_params": {
      },
      "unrestricted_access": false,
      "username": "john_doe"
    },
    "subscription_plan": {
      "id": 0,
      "interval_count": 1,
      "interval_unit": "month",
      "name": "Sample plan",
      "price_cents": 100000000,
      "slug": "0-sample-plan"
    },
    "trial_end_at": null,
    "trial_start_at": null
  }
}

Order events

Members place orders to purchase plans or downloads.

order.purchased

Sent when a member completes an order or when staff manually adds a new order. Not sent for subscription renewal orders.

 {
  "event": "order.purchased",
  "order": {
    "uuid": "4DACB7B0-B728-0130-F9E8-102B343DC979",
    "number": "4DACB7B0",
    "total": 100000000,
    "status": "completed",
    "receipt": "receipt text",
    "member": {
      "address": {
        "street": "Street",
        "city": "City",
        "postal_code": "Postal code",
        "country": "City"
      },
      "created_at": 1513113157,
      "credit_card": {
        "exp_month": 1,
        "exp_year": 2040
      },
      "custom_field": "Custom field value",
      "email": "john.doe@example.com",
      "first_name": "John",
      "full_name": "John Doe",
      "id": 0,
      "last_name": "Doe",
      "phone_number": "555-12345",
      "stripe_customer_id": "cus_00000",
      "tracking_params": {
      },
      "unrestricted_access": false,
      "username": "john_doe"
    },
    "products": [

    ],
    "subscriptions": [
      {
        "active": true,
        "created_at": 1513113157,
        "expires": true,
        "expires_at": 1515705157,
        "id": 0,
        "in_trial_period": false,
        "subscription": {
          "id": 0,
          "price": 1000,
          "name": "Sample plan",
          "slug": "0-sample-plan",
          "renewal_period": "monthly",
          "interval_unit": "month",
          "interval_count": 1,
          "for_sale": true
        },
        "trial_end_at": null,
        "trial_start_at": null
      }
    ]
  }
}

order.refunded

Sent when an order is refunded.

 {
  "event": "order.refunded",
  "order": {
    "uuid": "4DACB7B0-B728-0130-F9E8-102B343DC979",
    "number": "4DACB7B0",
    "total": 100000000,
    "status": "refunded",
    "receipt": "receipt text",
    "member": {
      "address": {
        "street": "Street",
        "city": "City",
        "postal_code": "Postal code",
        "country": "City"
      },
      "created_at": 1513113157,
      "credit_card": {
        "exp_month": 1,
        "exp_year": 2040
      },
      "custom_field": "Custom field value",
      "email": "john.doe@example.com",
      "first_name": "John",
      "full_name": "John Doe",
      "id": 0,
      "last_name": "Doe",
      "phone_number": "555-12345",
      "stripe_customer_id": "cus_00000",
      "tracking_params": {
      },
      "unrestricted_access": false,
      "username": "john_doe"
    },
    "products": [

    ],
    "subscriptions": [
      {
        "active": true,
        "created_at": 1513113157,
        "expires": true,
        "expires_at": 1515705157,
        "id": 0,
        "in_trial_period": false,
        "subscription": {
          "id": 0,
          "price": 1000,
          "name": "Sample plan",
          "slug": "0-sample-plan",
          "renewal_period": "monthly",
          "interval_unit": "month",
          "interval_count": 1,
          "for_sale": true
        },
        "trial_end_at": null,
        "trial_start_at": null
      }
    ]
  }
}

order.suspended

Sent when an order is suspended by staff.

 {
  "event": "order.suspended",
  "order": {
    "uuid": "4DACB7B0-B728-0130-F9E8-102B343DC979",
    "number": "4DACB7B0",
    "total": 100000000,
    "status": "suspended",
    "receipt": "receipt text",
    "member": {
      "address": {
        "street": "Street",
        "city": "City",
        "postal_code": "Postal code",
        "country": "City"
      },
      "created_at": 1513113157,
      "credit_card": {
        "exp_month": 1,
        "exp_year": 2040
      },
      "custom_field": "Custom field value",
      "email": "john.doe@example.com",
      "first_name": "John",
      "full_name": "John Doe",
      "id": 0,
      "last_name": "Doe",
      "phone_number": "555-12345",
      "stripe_customer_id": "cus_00000",
      "tracking_params": {
      },
      "unrestricted_access": false,
      "username": "john_doe"
    },
    "products": [

    ],
    "subscriptions": [
      {
        "active": true,
        "created_at": 1513113157,
        "expires": true,
        "expires_at": 1515705157,
        "id": 0,
        "in_trial_period": false,
        "subscription": {
          "id": 0,
          "price": 1000,
          "name": "Sample plan",
          "slug": "0-sample-plan",
          "renewal_period": "monthly",
          "interval_unit": "month",
          "interval_count": 1,
          "for_sale": true
        },
        "trial_end_at": null,
        "trial_start_at": null
      }
    ]
  }
}

order.completed

Sent when a suspended order is marked completed by staff.

 {
  "event": "order.completed",
  "order": {
    "uuid": "4DACB7B0-B728-0130-F9E8-102B343DC979",
    "number": "4DACB7B0",
    "total": 100000000,
    "status": "completed",
    "receipt": "receipt text",
    "member": {
      "address": {
        "street": "Street",
        "city": "City",
        "postal_code": "Postal code",
        "country": "City"
      },
      "created_at": 1513113157,
      "credit_card": {
        "exp_month": 1,
        "exp_year": 2040
      },
      "custom_field": "Custom field value",
      "email": "john.doe@example.com",
      "first_name": "John",
      "full_name": "John Doe",
      "id": 0,
      "last_name": "Doe",
      "phone_number": "555-12345",
      "stripe_customer_id": "cus_00000",
      "tracking_params": {
      },
      "unrestricted_access": false,
      "username": "john_doe"
    },
    "products": [

    ],
    "subscriptions": [
      {
        "active": true,
        "created_at": 1513113157,
        "expires": true,
        "expires_at": 1515705157,
        "id": 0,
        "in_trial_period": false,
        "subscription": {
          "id": 0,
          "price": 1000,
          "name": "Sample plan",
          "slug": "0-sample-plan",
          "renewal_period": "monthly",
          "interval_unit": "month",
          "interval_count": 1,
          "for_sale": true
        },
        "trial_end_at": null,
        "trial_start_at": null
      }
    ]
  }
}

Plan events

Staff create plans for members to purchase.

subscription_plan.created

Sent when a new plan is created.

 {
  "event": "subscription_plan.created",
  "subscription": {
    "id": 0,
    "price": 1000,
    "name": "Sample plan",
    "slug": "0-sample-plan",
    "renewal_period": "monthly",
    "interval_unit": "month",
    "interval_count": 1,
    "for_sale": true
  }
}

subscription_plan.updated

Sent when a plan is updated.

 {
  "event": "subscription_plan.updated",
  "subscription": {
    "id": 0,
    "price": 1000,
    "name": "Sample plan",
    "slug": "0-sample-plan",
    "renewal_period": "monthly",
    "interval_unit": "month",
    "interval_count": 1,
    "for_sale": true
  }
}

subscription_plan.deleted

Sent when a plan is deleted.

 {
  "event": "subscription_plan.deleted",
  "subscription": {
    "id": 0,
    "price": 1000,
    "name": "Sample plan",
    "slug": "0-sample-plan",
    "renewal_period": "monthly",
    "interval_unit": "month",
    "interval_count": 1,
    "for_sale": true
  }
}

Download events

Staff create downloads to include with plans or sell standalone.

download.created

Sent when a download is created.

 {
  "event": "download.created",
  "product": {
    "id": 0,
    "name": "Sample download",
    "price": 1000,
    "slug": "0-sample-download",
    "for_sale": true
  }
}

download.updated

Sent when a download is updated.

 {
  "event": "download.updated",
  "product": {
    "id": 0,
    "name": "Sample download",
    "price": 1000,
    "slug": "0-sample-download",
    "for_sale": true
  }
}

download.deleted

Sent when a download is deleted.

 {
  "event": "download.deleted",
  "product": {
    "id": 0,
    "name": "Sample download",
    "price": 1000,
    "slug": "0-sample-download",
    "for_sale": true
  }
}

General

How to

CMS Integrations

Email Newsletters

Discussion Forums

WordPress

Video

API