---
title: "Update membership"
method: PATCH
path: "/memberships/{id}"
tags: ["Memberships"]
---

# Update membership

`PATCH /memberships/{id}`

Update a membership's metadata or other mutable properties.

Required permissions:
 - `member:manage`
 - `member:email:read`
 - `member:basic:read`

## Path parameters

- `id` string, required

## Request body

- object — Parameters for UpdateMembershipV2
  - `metadata` object, nullable — A JSON object of key-value pairs to store on the membership. Replaces any existing metadata.

## Response `200`

A successful response

- Membership — A membership represents an active relationship between a user and a product. It tracks the user's access, billing status, and renewal schedule.
  - `cancel_at_period_end` boolean, required — Whether this membership is set to cancel at the end of the current billing cycle. Only applies to memberships with a recurring plan.
  - `cancel_option` 'too_expensive' | 'switching' | 'missing_features' | 'technical_issues' | 'bad_experience' | 'other' | 'testing', required — The different reasons a user can choose for why they are canceling their membership.
  - `canceled_at` string, date-time, nullable, required — The time the customer initiated cancellation of this membership. As a Unix timestamp. Null if the membership has not been canceled.
  - `cancellation_reason` string, nullable, required — Free-text explanation provided by the customer when canceling. Null if the customer did not provide a reason.
  - `checkout_configuration_id` string, nullable, required — The ID of the checkout session/configuration that produced this membership, if any. Use this to map memberships back to the checkout configuration that created them.
  - `company` object, required — The company this membership belongs to.
    - `id` string, required — The unique identifier for the company.
    - `title` string, required — The display name of the company shown to customers.
  - `created_at` string, date-time, required — The datetime the membership was created.
  - `currency` 'usd' | 'sgd' | 'inr' | 'aud' | 'brl' | 'cad' | 'dkk' | 'eur' | 'nok' | 'gbp' | 'sek' | 'chf' | 'hkd' | 'huf' | 'jpy' | 'mxn' | 'myr' | 'pln' | 'czk' | 'nzd' | 'aed' | 'eth' | 'ape' | 'cop' | 'ron' | 'thb' | 'bgn' | 'idr' | 'dop' | 'php' | 'try' | 'krw' | 'twd' | 'vnd' | 'pkr' | 'clp' | 'uyu' | 'ars' | 'zar' | 'dzd' | 'tnd' | 'mad' | 'kes' | 'kwd' | 'jod' | 'all' | 'xcd' | 'amd' | 'bsd' | 'bhd' | 'bob' | 'bam' | 'khr' | 'crc' | 'xof' | 'egp' | 'etb' | 'gmd' | 'ghs' | 'gtq' | 'gyd' | 'ils' | 'jmd' | 'mop' | 'mga' | 'mur' | 'mdl' | 'mnt' | 'nad' | 'ngn' | 'mkd' | 'omr' | 'pyg' | 'pen' | 'qar' | 'rwf' | 'sar' | 'rsd' | 'lkr' | 'tzs' | 'ttd' | 'uzs' | 'rub' | 'btc' | 'cny' | 'usdt' | 'kzt' | 'awg' | 'whop_usd' | 'xau', required — The available currencies on the platform
  - `custom_field_responses` object[], required — The customer's responses to custom checkout questions configured on the product at the time of purchase.
    - `answer` string, required — The response a user gave to the specific question or field.
    - `id` string, required — The unique identifier for the custom field response.
    - `question` string, required — The question asked by the custom field
  - `id` string, required — The unique identifier for the membership.
  - `joined_at` string, date-time, nullable, required — The time the user first joined the company associated with this membership. As a Unix timestamp. Null if the member record does not exist.
  - `license_key` string, nullable, required — The software license key associated with this membership. Only present if the product includes a Whop Software Licensing experience. Null otherwise.
  - `manage_url` string, nullable, required — The URL where the customer can view and manage this membership, including cancellation and plan changes. Null if no member record exists.
  - `member` object, nullable, required — The member record linking the user to the company for this membership. Null if the member record has not been created yet.
    - `id` string, required — The unique identifier for the member.
  - `metadata` object, nullable, required — Custom key-value pairs for the membership (commonly used for software licensing, e.g., HWID). Max 50 keys, 100 chars per key, 500 chars per string value.
  - `payment_collection_paused` boolean, required — Whether recurring payment collection for this membership is temporarily paused by the company.
  - `plan` object, required — The plan the customer purchased to create this membership.
    - `id` string, required — The unique identifier for the plan.
    - `metadata` object, nullable, required — Custom key-value pairs stored on the plan. Included in webhook payloads for payment and membership events. Max 50 keys, 100 chars per key, 500 chars per string value.
  - `product` object, required — The product this membership grants access to.
    - `id` string, required — The unique identifier for the product.
    - `metadata` object, nullable, required — Custom key-value pairs stored on the product and included in payment and membership webhook payloads. Max 50 keys, 100 characters per key, 500 characters per string value.
    - `title` string, required — The display name of the product shown to customers on the product page and in search results.
  - `promo_code` object, nullable, required — The promotional code currently applied to this membership's billing. Null if no promo code is active.
    - `id` string, required — The unique identifier for the promo code.
  - `renewal_period_end` string, date-time, nullable, required — The end of the current billing period for this recurring membership. As a Unix timestamp. Null if the membership is not recurring.
  - `renewal_period_start` string, date-time, nullable, required — The start of the current billing period for this recurring membership. As a Unix timestamp. Null if the membership is not recurring.
  - `status` 'trialing' | 'active' | 'past_due' | 'completed' | 'canceled' | 'expired' | 'unresolved' | 'drafted' | 'canceling', required — The status of a membership
  - `updated_at` string, date-time, required — The datetime the membership was last updated.
  - `user` object, nullable, required — The user who owns this membership. Null if the user account has been deleted.
    - `email` string, nullable, required — The user's email address. Requires the member:email:read permission to access. Null if not authorized.
    - `id` string, required — The unique identifier for the user.
    - `name` string, nullable, required — The user's display name shown on their public profile.
    - `username` string, required — The user's unique username shown on their public profile.

## Other responses

- `400` — Bad request
- `401` — Unauthorized
- `403` — Forbidden
- `404` — Not found
- `422` — Verification required
- `429` — Too many requests
- `500` — Internal server error

---

[API](https://skmtc.dev/whop/apis/whop-api.md) · [All operations](https://skmtc.dev/whop/apis/whop-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/whop/whop-api/revisions/3a06a605784b/schema)
