---
title: "Get compatible memberships for checkout cart"
method: POST
path: "/api/v2/host/checkout/compatible-memberships"
tags: ["host-checkout"]
---

# Get compatible memberships for checkout cart

`POST /api/v2/host/checkout/compatible-memberships`

This endpoint will return list of bought memberships of the specified member potentially compatible with the given checkout cart.

**NOTE**: The endpoint also returns memberships that are incompatible which is indicated by the incompatibility field. This is so you can present user with a reason why the membership is not usable in this case.

| Incompatibility | Description |
| --- | --- |
| session-membership-excluded | session is not included in specified membership |
| session-bought-membership-will-expire | bought membership will expire before the session start and it's not scheduled to renew |
| session-bought-membership-pack-will-expire | pack will expire before the session starts |
| session-bought-membership-already-used | bought membership was already used for this session and it's not allowed to use it multiple times |
| session-bought-membership-usage-limit-reached | subscription has reached its usage limit for the renewal period that's aligned with session |
| session-bought-membership-usage-limit-reached-for-semester-or-course | subscription has reached its usage limit for the renewal period or periods that're aligned with the whole semester or course |
| session-bought-membership-daily-limit-reached | bought membership was already used today and is limited to one use per day |
| session-bought-membership-no-event-credits-left | no event credits are left in the pack |
| session-bought-membership-no-money-credits-left | no money credits are left in the pack |
| session-bought-membership-on-demand | bought membership is only usable for on-demand content, not classes |
| session-bought-membership-starts-later | bought membership starts being valid after the session start |
| session-bought-membership-invalid-type | bought membership is not usable for this |
| session-bought-membership-disabled | membership linked with the bought membership was disabled and thus it can't be used |
| session-bought-membership-frozen | bought membership is frozen when the session happens |
| session-subscription-ticket-limit | subscription is limited to one ticket |
| unknown | unknown reason |

## Request body

- HostCheckoutCompatibleMembershipsRequestDto
  - `memberId` integer, required — ID of the member to perform the checkout for
  - `items` union[], required
    - union
      - HostCheckoutMembershipItemDto
        - `id` string, required
        - `type` 'subscription', required
        - `membershipId` integer, required
      - HostCheckoutSessionItemDto
        - `id` string, required
        - `type` 'session', required
        - `sessionId` integer, required
        - `appliedPriceRuleIds` integer[]
  - `homeLocationId` integer

## Response `200`

- HostCheckoutCompatibleMembershipsResponseDto
  - `items` HostCheckoutCompatibleMembershipDto[], required
    - `boughtMembership` HostCheckoutCompatibleBoughtMembershipDto, required
      - `id` integer, required
      - `type` 'subscription' | 'on-demand-subscription' | 'package-events' | 'package-money' | 'patron', required
      - `startDate` string, date-time, nullable, required — start date of the bought membership
      - `endDate` string, date-time, nullable, required — expiration date of the bought membership
      - `eventCreditsLeft` number, nullable, required — number of event credits left, valid for PACKAGE_EVENTS
      - `eventCreditsTotal` number, nullable, required — number of event credits originally included in the package, valid for PACKAGE_EVENTS
      - `moneyCreditsLeft` number, nullable, required — number of money credits left, valid for PACKAGE_MONEY
      - `moneyCreditsTotal` number, nullable, required — number of money credits originally included in the package, valid for PACKAGE_MONEY
      - `membership` HostMembershipBasicDto, required
        - `id` integer, required
        - `name` string, required
        - `description` string, nullable, required
        - `type` 'subscription' | 'on-demand-subscription' | 'package-events' | 'package-money' | 'patron', required
        - `locationId` integer, nullable, required
        - `disabled` boolean, required — Indicates that the membership was disabled
        - `autoRenewing` boolean, required — Indicates that membership renews after specific interval
        - `minimumAutoRenews` integer, nullable, required — How many times membership has to renew before user can cancel renewal
        - `eventCredits` integer, nullable, required — For PACKAGE_EVENTS memberships, defines how many event credits are included
        - `moneyCredits` number, nullable, required — For PACKAGE_MONEY memberships, defines how much money is included
        - `duration` integer, nullable, required — For SUBSCRIPTION this is auto renew duration, for PACKAGE_* this is expiration time
        - `durationUnit` 'days' | 'months' | 'years', nullable, required
        - `isActivatedOnFirstUse` boolean, required — If set to false, membership is activated upon purchase. When set to true, membership is activated at the moment of the first purchase. When the purchase is for booking in the future, the activation date is set to the booking date.
        - `activationDeadlineInDays` integer, nullable, required — Only applicable when isActivatedOnFirstUse=true. If set, the member must activate the membership within this many days of purchase or it expires automatically.
        - `hasFreeTrial` boolean, required
        - `freeTrialDurationInDays` integer, required
        - `contractAgreement` string, nullable, required
        - `order` integer, required
        - `isIntroOffer` boolean, required
        - `usageLimitForSessions` number, nullable, required — Only applicable for SUBSCRIPTION. Maximum number of sessions customer can book with this membership during one renewal period, not used when combinedUsageLimitEnabled=true
        - `usageLimitForAppointments` number, nullable, required — Only applicable for SUBSCRIPTION. Maximum number of appointments customer can book with this membership during one renewal period, not used when combinedUsageLimitEnabled=true
        - `combinedUsageLimitEnabled` boolean, required — Only applicable for SUBSCRIPTION. The usage limits of the memberships are applied to sum of both bookings and appointments.
        - `combinedUsageLimit` number, nullable, required — Only applicable for SUBSCRIPTION. Combined maximum number of bookings and appointments customer can book with this membership during one renewal period, only used when combinedUsageLimitEnabled=true
        - `usageLimitRenewalEnabled` boolean, required — Only applicable for SUBSCRIPTION. Calculate usage limits differently to renewal duration.
        - `usageLimitRenewalDuration` number, nullable, required — Only applicable for SUBSCRIPTION. Interval for which the usage limits are calculated, only used when usageLimitRenewalEnabled=true
        - `usageLimitRenewalDurationUnit` 'days' | 'months' | 'years', nullable, required — Only applicable for SUBSCRIPTION. Interval for which the usage limits are calculated, only used when usageLimitRenewalEnabled=true
        - `usageLimitRolloverEnabled` boolean, required — Only applicable for SUBSCRIPTION. When true and customer doesn't use reach their usage limits, the rest is transferred to the customer according to usageLimitRolloverMode
        - `usageLimitRolloverMode` 'next-renewal' | 'event-credits', nullable, required — Only applicable for SUBSCRIPTION. How should extra usage limits be transferred to customer, either as package or as addition to next renewal period. Only used when usageLimitRolloverEnabled=true
        - `usageLimitRolloverExpirationDuration` number, nullable, required — Only applicable for SUBSCRIPTION. When should the extra limits / package expire after rolling over. Only used when usageLimitRolloverEnabled=true
        - `usageLimitRolloverExpirationDurationUnit` 'days' | 'months' | 'years', nullable, required — Only applicable for SUBSCRIPTION. When should the extra limits / package expire after rolling over. Only used when usageLimitRolloverEnabled=true
    - `incompatibility` 'session-membership-excluded' | 'session-bought-membership-will-expire' | 'session-bought-membership-pack-will-expire' | 'session-bought-membership-already-used' | 'session-bought-membership-usage-limit-reached' | 'session-bought-membership-usage-limit-reached-for-semester-or-course' | 'session-bought-membership-daily-limit-reached' | 'session-bought-membership-no-event-credits-left' | 'session-bought-membership-no-money-credits-left' | 'session-bought-membership-on-demand' | 'session-bought-membership-starts-later' | 'session-bought-membership-invalid-type' | 'session-bought-membership-disabled' | 'session-bought-membership-frozen' | 'session-subscription-ticket-limit' | 'unknown'

---

[API](https://skmtc.net/momence/apis/momence-public.md) · [All operations](https://skmtc.net/momence/apis/momence-public/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/momence/momence-public/revisions/5e27e54ff467/schema)
