---
title: "Confirm a membership"
method: POST
path: "/customers/memberships/{membershipId}/confirm"
tags: ["Memberships"]
---

# Confirm a membership

`POST /customers/memberships/{membershipId}/confirm`

When a membership is created through the self-signup flow, it first goes
into the "reserved" stage. This means the client hasn't completed their
signup yet, and the basket needs to be completed. Calling this endpoint
sets the status to `needs_attention` if a mandate is required, or
`active` if not.

## Headers

- `X-Trybe-On-Behalf-Of` string, uuid

## Response `200`

The `Membership` was successfully retrieved

- object
  - `data` Membership, required
    - `id` string, uuid, required — The ID of the membership
    - `attention_reason` 'no_mandate' | 'setup_unpaid' | 'mandate_revoked' | 'payment_failed' | 'payment_disputed' | 'payment_outstanding' | 'site_id', required — A string describing what kind of action needs to take place
    - `basket_id` string, mongo-id, required — The basket ID which was used to purchase this membership, if applicable.
    - `customer` Customer — A guest record — the long-lived profile that bookings, orders, payments, memberships and marketing preferences attach to. Customers are scoped to a site (and, where configured, an organisation) and may have multiple addresses, payment methods and external IDs. Their email is the natural login identifier when self-service is enabled.
      - `id` string, uuid, required — The ID of the customer.
      - `first_name` string, nullable, required — The first name of the customer.
      - `last_name` string, nullable, required — The last name of the customer.
      - `full_name` string, nullable, required — The customer's full name
      - `phone` string, nullable, required — The customer's phone number in E.164 format, or `null` if not provided.
      - `has_password` boolean, required — Whether the user has a password
      - `dob` string, date, nullable, required — The customer's date of birth in YYYY-MM-DD format, or `null` if not provided.
      - `brand_id` string, uuid, required — The ID of the brand this customer belongs to
      - `site_id` string, uuid, required — Identifier of the site the customer was created at. Customer records are scoped per site so each location's CRM data is isolated; cross-site reporting is available via the brand or organisation.
      - `stripe_id` string, nullable, required — The Stripe Customer ID for this customer
      - `express_stripe_id` string, nullable, required — The Stripe Customer ID for this customer if they also exist in Trybe's legacy Stripe integration
      - `email` string, nullable, required — The email address of the customer. The case of the email address is not preserved, so you'll always see this in lowercase.
      - `labels` SchemasCustomerLabel[], required — An array of labels associated with this customer
        - `id` string, uuid, required — The ID of the label
        - `value` string, required — The name of the label
        - `colour` string, required — A hex colour code excluding the preceding \# which this label will be rendered as.
      - `preferred_locale` string, required — The preferred locale of the customer. This must be one of the platform's supported locales, which can be retrieved using the [`listMetaSupportedLocales`](/endpoints/Meta#listMetaSupportedLocales) endpoint.
      - `locked_at` string, date-time, nullable, required — The datetime which the customer was locked, or null if it has not been locked.
      - `created_at` string, date-time, required — The datetime which the customer was created
      - `updated_at` string, date-time, required — The datetime which the customer was last updated
      - `deleted_at` string, date-time, nullable, required — The datetime which the customer was anonymised, or null if it has not been.
      - `last_active_at` string, date-time, nullable, required — The datetime which the customer was last active
      - `email_verified_at` string, date-time, nullable, required — The datetime which the customer verified their email address
      - `last_check_in` LastCheckInSummary, required
        - `checked_in_at` string, date-time, nullable, required — The datetime which the customer was last checked in.
        - `method` string, required — The name of the method used to create this check-in
      - `avatar_id` string, uuid, nullable, required — The media ID of the customer's avatar, or `null` if one hasn't been provided.
      - `avatar` Media, required
        - `id` string, uuid, required — Unique identifier of the uploaded media item, returned from `createMedia`. Pass this ID into any field that accepts a media reference (logos, hero images, product images, etc.).
        - `file_name` string, required — Original filename of the uploaded asset, preserved as provided at upload time. Used for display in the media library and as a hint when serving downloads.
        - `mime_type` string, required — The mime type of the media item.
        - `original_url` string, required — The url of the media resource.
        - `size` integer, required — The size of the media item in bytes.
        - `url` string, required — The url of the converted media resource.
      - `external_ref` string, nullable, required — An external reference for this customer.
    - `end_date` string, date-time, nullable, required — The date which the membership ends
    - `external_ref` string, required — An external reference for this membership.
    - `members` MemberSummary[], required
      - `customer_id` string, uuid, required — The ID of the customer
      - `is_lead` boolean, required — Whether this member is the lead member
      - `membership_number` string, required — The unique membership number of the member
    - `membership_number` string, required — The unique membership number of the lead member. This is always a 10 digit numeric string. Since this field only relates to the lead member, this is now deprecated. Instead, find the membership for the relevant customer in the `members` array.
    - `next_billing_date` string, date-time, nullable, required — The date which the membership will next be billed
    - `next_charge` MembershipChargeSummary — A summary of a membership charge
      - `id` string, uuid, required — The ID of the membership charge
      - `amount` integer, required — The amount of the charge, in minor units
      - `currency` string, required — The currency of the charge. See [Supported Currencies](/endpoints/Meta#listMetaSupportedCurrencies) for a list of supported currencies.
      - `status` 'awaiting_approval' | 'pending' | 'succeeded' | 'processing' | 'errored' | 'failed', required — The status of the charge.
      - `billing_period_from` string, date, required — The first date covered by the charge
      - `billing_period_to` string, date, required — The last date covered by the charge
    - `payment_method` object, nullable, required — Details about the payment method attached to this membership. This payment method is used to take payment on the monthly billing period. If a payment method hasn't been set up, this will be null.
      - `id` string — The ID of the payment method this membership uses for
      - `type` 'card' | 'direct_debit' — The type of payment method.
      - `last_4` string — The last 4 digits of the long card number or the bank account number.
      - `status` string — When the payment method is a Direct Debit mandate, the status shows whether the mandate is usable or not
      - `card_brand` string — The brand of the card
    - `rate` MembershipRate, required
      - `id` string, uuid, required — The ID of the membership rate
      - `membership_type_id` string, uuid, required — The ID of the `MembershipType` which this rate belongs to
      - `name` string, required — The name of the membership rate
      - `currency` string, required — The currency which all monetary values of this rate are in, uppercase, in the ISO4217 format
      - `price` number, required — The price of the rate as an integer of the smallest unit eg pence. This is charged to the customer every billing period according to the `billing_frequency`
      - `joining_fee` number, required — The price of the joining fee as an integer of the smallest unit eg pence.
      - `billing_frequency` string, required — The frequency that this membership is billed. The duration is specified as an ISO8601 duration string. See https://en.wikipedia.org/wiki/ISO_8601#Durations
      - `processors` string[], required
      - `default_duration` string, nullable, required — The default duration of the membership. This is used when a customer signs themselves up for a membership. The duration is specified as an ISO8601 duration string. See https://en.wikipedia.org/wiki/ISO_8601#Durations
      - `notice_period` 'P7D' | 'P14D' | 'P1M' | 'P3M' | 'P6M' | 'P1Y' | 'null', nullable, required — How much notice a customer must give to cancel a membership on this rate. The duration is specified as an ISO8601 duration string. See https://en.wikipedia.org/wiki/ISO_8601#Durations When null, no notice is required.
      - `private` boolean, required — Whether this `MembershipRate` is private. If public, it will be selectable on the self-signup flow.
      - `created_at` string, date-time, required — The datetime which the rate was created
      - `updated_at` string, date-time, required — The datetime which the membership was last updated
    - `site_id` string, uuid, required — The ID of the site this membership belongs to
    - `source` 'self_signup' | 'app' | 'import' | 'unknown', required — Where the membership was created
    - `start_date` string, date-time, required — The date which the membership starts
    - `status` 'active' | 'needs_dd_mandate' | 'needs_attention' | 'reserved' | 'inactive' | 'expired' | 'upcoming', required
    - `status_updated_at` string, date-time, required
    - `type` MembershipType, required
      - `id` string, uuid, required — The ID of the membership type
      - `name` string, required — The name of the membership type
      - `description` string, nullable, required — The description of the membership type
      - `terms` string, nullable, required — Terms and conditions of the membership type
      - `brand_id` string, uuid, required — The ID of the brand this type is linked to
      - `offline_payments` boolean, required — Whether this MembershipType takes "offline" payments. If true, the monthly fee won't automatically be collected using Stripe, which can be useful if a different provider is used for collecting direct debits. You'll need to manually manage the membership status.
      - `disable_confirmation_email` boolean, required — Whether to disable sending the confirmation email when a membership is confirmed.
      - `private` boolean, required — Whether this `MembershipType` is private or not. When a `MembershipType` is private, it won't be shown to users on the site's shop frontend. This field is deprecated and has been superceded by `visibility`.
      - `visibility` 'public' | 'private' | 'link_only' — The visibility of the `MembershipType` on the site's shop frontend.
      - `minimum_start_date` string, date-time, nullable, required — The minimum start date for a membership of this type.
      - `min_members` integer, required — The minimum number of members required to create a membership of this type
      - `max_members` integer, required — The maximum number of members allowed to create a membership of this type
      - `rates` MembershipRate[], required — The public MembershipRates for this type, or if a `MembershipSignupToken` was passed, the rate linked to that.
        - `id` string, uuid, required — The ID of the membership rate
        - `membership_type_id` string, uuid, required — The ID of the `MembershipType` which this rate belongs to
        - `name` string, required — The name of the membership rate
        - `currency` string, required — The currency which all monetary values of this rate are in, uppercase, in the ISO4217 format
        - `price` number, required — The price of the rate as an integer of the smallest unit eg pence. This is charged to the customer every billing period according to the `billing_frequency`
        - `joining_fee` number, required — The price of the joining fee as an integer of the smallest unit eg pence.
        - `billing_frequency` string, required — The frequency that this membership is billed. The duration is specified as an ISO8601 duration string. See https://en.wikipedia.org/wiki/ISO_8601#Durations
        - `processors` string[], required
        - `default_duration` string, nullable, required — The default duration of the membership. This is used when a customer signs themselves up for a membership. The duration is specified as an ISO8601 duration string. See https://en.wikipedia.org/wiki/ISO_8601#Durations
        - `notice_period` 'P7D' | 'P14D' | 'P1M' | 'P3M' | 'P6M' | 'P1Y' | 'null', nullable, required — How much notice a customer must give to cancel a membership on this rate. The duration is specified as an ISO8601 duration string. See https://en.wikipedia.org/wiki/ISO_8601#Durations When null, no notice is required.
        - `private` boolean, required — Whether this `MembershipRate` is private. If public, it will be selectable on the self-signup flow.
        - `created_at` string, date-time, required — The datetime which the rate was created
        - `updated_at` string, date-time, required — The datetime which the membership was last updated
      - `revenue_schedule` string, nullable, required — The schedule that revenues for this membership should be created, as an [RRULE](https://icalendar.org/iCalendar-RFC-5545/3-8-5-3-recurrence-rule.html) string
      - `created_at` string, date-time, required — The datetime which the membership type was created
      - `updated_at` string, date-time, required — The datetime which the membership type was last updated
      - `deleted_at` string, date-time, nullable, required — The datetime which the membership type was archived, or null if it isn't archived.
    - `payment_details_url` string — A URL to a page where the member can provide their payment details.
    - `created_at` string, date-time, required — The datetime which the membership was created

## Other responses

- `400` — The request failed.
- `401` — The user is unauthenticated
- `403` — The authenticated user does not have permission.
- `404` — The resource couldn't be found

---

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