> ## 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.

# Read the membership custom field form

> Returns the current offering form, falling back to the scheme form. Custom fields include their IDs, answer shapes, requiredness and structured current answers. Select, radio and checkbox questions expose accepted tokens as optionValues. Hidden, deleted and identity fields are omitted, and field permissions apply to the caller. Check editable before offering an edit: grouped choices, custom address and phone questions, waivers, conditional, priced, verified and other unsupported field workflows remain read-only. Gender questions remain discoverable with their accepted values and editability. Only submitted answers are validated on PATCH.

> [!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-seats/{seatId}/form
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 seats on them, owned by
      your organizer. Policies are billing contracts; a seat is one person's
      place 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: Teams
    x-group: Teams
    description: >-
      Teams group participants of an event occurrence under a team program.
      Teams can be imported for participants whose bookings were imported.
  - 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-seats/{seatId}/form:
    get:
      tags:
        - Membership
      summary: Read the membership custom field form
      description: >-
        Returns the current offering form, falling back to the scheme form.
        Custom fields include their IDs, answer shapes, requiredness and
        structured current answers. Select, radio and checkbox questions expose
        accepted tokens as optionValues. Hidden, deleted and identity fields are
        omitted, and field permissions apply to the caller. Check editable
        before offering an edit: grouped choices, custom address and phone
        questions, waivers, conditional, priced, verified and other unsupported
        field workflows remain read-only. Gender questions remain discoverable
        with their accepted values and editability. Only submitted answers are
        validated on PATCH.
      parameters:
        - schema:
            type: string
            pattern: ^[a-fA-F0-9]{24}$
          in: path
          name: seatId
          required: true
      responses:
        '200':
          description: Default Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MembershipSeatForm'
        '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
                      - MEMBERSHIP_PRIMARY_MEMBER_ONLY
                    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. PRIMARY_MEMBER_ONLY means only
                      the primary member of the policy can do this.
                  statusCode:
                    type: integer
                  message:
                    type: string
components:
  schemas:
    MembershipSeatForm:
      title: MembershipSeatForm
      type: object
      properties:
        id:
          type: string
          description: Seat ID.
        fields:
          type: array
          items:
            $ref: '#/components/schemas/MembershipSeatFormField'
      required:
        - id
        - fields
      additionalProperties: false
    MembershipSeatFormField:
      title: MembershipSeatFormField
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        type:
          type: string
        required:
          type: boolean
        editable:
          type: boolean
          description: Whether this caller may edit the field through this API.
        answerShape:
          type:
            - string
            - 'null'
          enum:
            - value
            - values
            - null
          description: >-
            The answer property to send. Null means this field's workflow is
            unsupported.
        optionValues:
          type: array
          items:
            type: string
          description: >-
            Accepted SELECT, RADIO_BUTTONS or CHECK_BOXES tokens, rather than
            option IDs.
        maxSelectable:
          type: number
        format:
          type: string
        answer:
          anyOf:
            - $ref: '#/components/schemas/MembershipSeatFieldAnswer'
            - type: 'null'
          description: >-
            Scalar or list current answer; null when unanswered or stored as an
            unsupported composite.
      required:
        - id
        - name
        - type
        - required
        - editable
        - answerShape
        - answer
      additionalProperties: false
    MembershipSeatFieldAnswer:
      title: MembershipSeatFieldAnswer
      type: object
      properties:
        value:
          type: string
        values:
          type: array
          items:
            type: string
      additionalProperties: false
      description: >-
        One answer representation only. Omit all representations to clear an
        optional field.
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT

````

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