> ## Documentation Index
> Fetch the complete documentation index at: https://partner-help.letsdothis.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Get a membership dashboard

> Returns the policy, the price revision it is on, plan composition, benefits and status. includeCard=true adds the last four digits of the card when available. The caller must authorize their logged-in member to this policy.

> [!NOTE]
>
> This endpoint is in beta: its request and response contract can still change while it's being developed.


## OpenAPI

````yaml /openapi.json get /v0/membership-policies/{policyId}
openapi: 3.1.0
info:
  title: Let's Do This API
  version: 0.1.0
  description: >
    The full reference — getting started, pagination, error responses, rate
    limits and the changelog — lives at

    [partner-help.letsdothis.com/api-reference](https://partner-help.letsdothis.com/api-reference/overview).

    This page is the interactive OpenAPI view of the same specification.


    # Authentication


    Create an API key from **Settings** → **Credentials** in your Let's Do This
    account and send it as a bearer token:


    ```bash

    curl --request GET \
     --url "https://api.letsdothis.com/v0/participants" \
     --header "Authorization: Bearer YOUR-API-KEY"
    ```


    Keep the key secret: it identifies your organization, so do not ship it in a
    website or native app. If a key is exposed,

    revoke it from the same section and create a replacement.


    # OpenAPI schema


    Download the [OpenAPI schema](https://api.letsdothis.com/documentation/json)
    to use with Postman or an OpenAPI client

    generator.
servers:
  - url: https://api.letsdothis.com
    description: Production
  - url: https://api.staging.letsdothis.com
    description: Staging
security:
  - bearerAuth: []
tags:
  - name: Events
    x-group: Events
    description: Events that participants can register for.
  - name: EventOccurrences
    x-group: Event occurrences
    description: >-
      Event occurrences scoped to the organizer associated with your Public API
      credentials. Unlike the public Events catalog, results are limited to your
      own events.
  - name: Races
    x-group: Races
    description: >-
      Races within an event occurrence. An event occurrence may have one or more
      races, for example a 5K and a 10K within the same race day.
  - name: Tickets
    x-group: Tickets
    description: Tickets that are available for events.
  - name: BookingForms
    x-group: Booking forms
    description: >-
      Booking forms define the questions a booker answers when registering for a
      ticket. A ticket usually references a single booking form, so expect zero
      or one, while a booking form may be shared across multiple tickets.
  - name: BookingFormFields
    x-group: Booking form fields
    description: >-
      Booking form fields are the individual questions on a booking form — their
      type, label, options, and whether an answer is required. A field can be
      reused across multiple forms.
  - name: Bookings
    x-group: Bookings
    description: >-
      Bookings are the transaction record for a registration. A booking may
      contain one or more participants (entries).
  - name: Membership
    x-group: Memberships
    description: >-
      Membership schemes, purchased policies and the memberships on them, owned
      by your organizer. Policies are billing contracts; a membership is one
      person on a policy.
  - name: Participant
    x-group: Participants
    description: Participants are users who successfully booked an event.
  - name: LineItem
    x-group: Line items
    description: Financial details related to individual items within transactions.
  - name: AddOns
    x-group: Add-ons
    description: >-
      Organizer-owned products that can be purchased and allocated to
      participants. Imported products retain stable external identities.
  - name: DiscountCodes
    x-group: Discount codes
    description: >-
      Discount codes participants enter at checkout to reduce the price of a
      booking.
  - name: Credits
    x-group: Credits
    description: >-
      Credits are balances participants can spend at checkout, identified by
      their email address.
  - name: Referrals
    x-group: Referrals
    description: >-
      Referral programs, the referrers registered on them, and asynchronous
      imports of historical referrals.
  - name: Application
    x-group: Applications
    description: >-
      Applications are created when a user applies for tickets that are set up
      to require an application process, such as balloted or "Good For Age"
      entries.
  - name: Partner
    x-group: Partners
    description: >-
      Partners that were created by the organization who can have Reserved
      Entries assigned to them.
  - name: ReservedEntries
    x-group: Reserved entries
    description: >-
      Reserved Entries are entries that are reserved for a partner. After being
      assigned, the partner can then allocate these entries to participants.
  - name: Timing
    x-group: Timing
    description: >-
      Timing providers push bib numbers and bib-pack shipments back to Let's Do
      This for the startlist entries they received. Available to select timing
      partners only.
  - name: Identity
    x-group: API key
    description: >-
      What your API key can reach. Available to every key, including scoped
      ones.
paths:
  /v0/membership-policies/{policyId}:
    get:
      tags:
        - Membership
      summary: Get a membership dashboard
      description: >-
        Returns the policy, the price revision it is on, plan composition,
        benefits and status. includeCard=true adds the last four digits of the
        card when available. The caller must authorize their logged-in member to
        this policy.
      parameters:
        - schema:
            type: boolean
            default: false
          in: query
          name: includeCard
          required: false
        - schema:
            type: string
            pattern: ^[a-fA-F0-9]{24}$
          in: path
          name: policyId
          required: true
      responses:
        '200':
          description: Default Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MembershipPolicyDashboard'
        '400':
          description: Default Response
          content:
            application/json:
              schema:
                type: object
                required:
                  - code
                  - statusCode
                  - message
                properties:
                  code:
                    type: string
                    enum:
                      - MEMBERSHIP_RESOURCE_NOT_FOUND
                      - MEMBERSHIP_INVALID_REQUEST
                      - MEMBERSHIP_PORTAL_CONFIGURATION_REQUIRED
                      - MEMBERSHIP_BILLING_UNAVAILABLE
                      - MEMBERSHIP_FROZEN
                      - MEMBERSHIP_ALREADY_CANCELLED
                    description: >-
                      Stable error identifier. RESOURCE_NOT_FOUND covers missing
                      and foreign resources alike. INVALID_REQUEST covers
                      malformed input or fields that cannot be edited.
                      PORTAL_CONFIGURATION_REQUIRED requires account setup;
                      BILLING_UNAVAILABLE means billing cannot be resolved or
                      reached. FROZEN and ALREADY_CANCELLED are reserved for
                      future lifecycle writes.
                  statusCode:
                    type: integer
                  message:
                    type: string
        '404':
          description: Default Response
          content:
            application/json:
              schema:
                type: object
                required:
                  - code
                  - statusCode
                  - message
                properties:
                  code:
                    type: string
                    enum:
                      - MEMBERSHIP_RESOURCE_NOT_FOUND
                      - MEMBERSHIP_INVALID_REQUEST
                      - MEMBERSHIP_PORTAL_CONFIGURATION_REQUIRED
                      - MEMBERSHIP_BILLING_UNAVAILABLE
                      - MEMBERSHIP_FROZEN
                      - MEMBERSHIP_ALREADY_CANCELLED
                    description: >-
                      Stable error identifier. RESOURCE_NOT_FOUND covers missing
                      and foreign resources alike. INVALID_REQUEST covers
                      malformed input or fields that cannot be edited.
                      PORTAL_CONFIGURATION_REQUIRED requires account setup;
                      BILLING_UNAVAILABLE means billing cannot be resolved or
                      reached. FROZEN and ALREADY_CANCELLED are reserved for
                      future lifecycle writes.
                  statusCode:
                    type: integer
                  message:
                    type: string
components:
  schemas:
    MembershipPolicyDashboard:
      title: MembershipPolicyDashboard
      type: object
      additionalProperties: false
      properties:
        id:
          type: string
        schemeId:
          type: string
        offeringId:
          type:
            - string
            - 'null'
        offeringPriceId:
          type:
            - string
            - 'null'
        price:
          anyOf:
            - $ref: '#/components/schemas/MembershipPrice'
            - type: 'null'
          description: The revision pinned to this policy, which may no longer be on sale.
        offering:
          anyOf:
            - type: object
              properties:
                id:
                  type: string
                schemeId:
                  type: string
                tier:
                  type: object
                  properties:
                    id:
                      type: string
                    title:
                      type: string
                    description:
                      type: string
                  required:
                    - id
                    - title
                  additionalProperties: false
                plan:
                  type: object
                  properties:
                    id:
                      type: string
                    title:
                      type: string
                    description:
                      type: string
                    numberOfAdults:
                      type: number
                    numberOfChildren:
                      type: number
                    maxChildAge:
                      type: number
                    maxTotalMembers:
                      type: number
                    primaryMemberType:
                      type: string
                  required:
                    - id
                    - title
                    - numberOfAdults
                    - numberOfChildren
                    - maxChildAge
                    - maxTotalMembers
                    - primaryMemberType
                  additionalProperties: false
                benefitsMarkdown:
                  type: string
                benefits:
                  type: array
                  items:
                    $ref: '#/components/schemas/MembershipOfferingBenefit'
              required:
                - id
                - schemeId
                - tier
                - plan
                - benefits
              additionalProperties: false
            - type: 'null'
        billingCard:
          anyOf:
            - type: object
              properties:
                last4:
                  type: string
              required:
                - last4
              additionalProperties: false
            - type: 'null'
          description: >-
            The card's last four digits, returned when requested with
            includeCard=true.
        billingCardState:
          type: string
          enum:
            - NOT_REQUESTED
            - AVAILABLE
            - UNAVAILABLE
        status:
          type: string
          enum:
            - ACTIVE
            - CANCELLED_RUNNING
            - FROZEN
            - ENDED
          description: >-
            `ACTIVE` grants access. `CANCELLED_RUNNING` has renewal canceled but
            keeps access until the policy ends. `FROZEN` is blocked by a failed
            payment. `ENDED` has ended or is blocked for another reason. Use
            `entitled` for access decisions.
        entitled:
          type: boolean
          description: >-
            Whether the member has access now. A failed renewal does not remove
            access before the paid period ends. Access can continue briefly
            after that while renewal payment is pending; other blockers can deny
            access immediately.
        paymentFailed:
          type: boolean
          description: >-
            True once a renewal payment has failed. Access continues until the
            paid period ends, so this can be true while `entitled` is still
            true; after that the status is `FROZEN`.
        blockingReasons:
          type: array
          items:
            type: string
            enum:
              - ORGANIZER_OFFBOARDED
              - CANCELLED_IMMEDIATELY
              - OTHER
          description: >-
            Blockers other than a failed payment, such as an immediate
            cancellation. Can be empty while access is denied, so don't use it
            as the access decision.
        frozenReason:
          type:
            - string
            - 'null'
          enum:
            - PAYMENT_FAILED
            - null
        expiresAt:
          type:
            - string
            - 'null'
          description: >-
            When the paid period ends, moved on each time a renewal is paid.
            Access can continue briefly after it while a renewal is collected.
            Null when the membership has no end date or its first payment is
            outstanding.
        renewalDate:
          type:
            - string
            - 'null'
        cancelAtDate:
          type:
            - string
            - 'null'
        autoRenew:
          type:
            - boolean
            - 'null'
      required:
        - autoRenew
        - billingCard
        - billingCardState
        - blockingReasons
        - cancelAtDate
        - entitled
        - expiresAt
        - frozenReason
        - id
        - offering
        - offeringId
        - offeringPriceId
        - paymentFailed
        - price
        - renewalDate
        - schemeId
        - status
    MembershipPrice:
      title: MembershipPrice
      type: object
      properties:
        id:
          type: string
          description: Public offering-price revision id, also pinned on a member's policy.
        offeringId:
          type: string
        isCurrent:
          type: boolean
          description: >-
            On sale to new members now; does not describe an existing member's
            price.
        createdAt:
          type: string
        retiredAt:
          type: string
        purchaseType:
          type: string
          enum:
            - ONE_TIME
            - SUBSCRIPTION
        amount:
          anyOf:
            - $ref: '#/components/schemas/MembershipMoney'
            - type: 'null'
          description: >-
            Null when a legacy price's configuration is unavailable, never
            interpreted as free.
        fee:
          anyOf:
            - $ref: '#/components/schemas/MembershipMoney'
            - type: 'null'
        billingInterval:
          type:
            - string
            - 'null'
          enum:
            - day
            - week
            - month
            - year
            - null
          description: >-
            How often a subscription renews, with billingIntervalCount; null for
            a one-time price or an unavailable configuration.
        billingIntervalCount:
          type:
            - number
            - 'null'
          description: >-
            How many billingInterval units one billing cycle spans, e.g. 3 with
            month for quarterly.
        detailsAvailable:
          type: boolean
      required:
        - id
        - offeringId
        - isCurrent
        - createdAt
        - purchaseType
        - amount
        - fee
        - billingInterval
        - billingIntervalCount
        - detailsAvailable
      additionalProperties: false
    MembershipOfferingBenefit:
      title: MembershipOfferingBenefit
      type: object
      properties:
        title:
          type: string
        type:
          type: string
          enum:
            - PRICE_ADJUSTMENT
            - GUEST_PASS
        adjustmentType:
          type: string
          enum:
            - ABSOLUTE_PRICE
            - ABSOLUTE_DISCOUNT
            - PERCENTAGE_DISCOUNT
        amount:
          $ref: '#/components/schemas/MembershipMoney'
        percentage:
          type: number
        maxUses:
          type: number
        discountAppliesToBookingFee:
          type: boolean
        resetsOnRenewal:
          type: boolean
        restrictions:
          type: object
          properties:
            eventIds:
              type: array
              items:
                type: string
            eventOccurrenceIds:
              type: array
              items:
                type: string
            raceIds:
              type: array
              items:
                type: string
            ticketSlugs:
              type: array
              items:
                type: string
            bookingItemIds:
              type: array
              items:
                type: string
          additionalProperties: false
      required:
        - title
        - type
        - restrictions
      additionalProperties: false
    MembershipMoney:
      title: MembershipMoney
      type: object
      properties:
        value:
          type: number
        currencyCode:
          type: string
      required:
        - value
        - currencyCode
      additionalProperties: false
      description: Money in minor units, e.g. DKK 150 is value 15000.
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.