Luma Memberships API

The Memberships API from Luma — 3 operation(s) for memberships.

Operations 3

GET /v1/memberships/tiers/list List Membership Tiers #
POST /v1/memberships/members/add Add Member to Tier #
POST /v1/memberships/members/update-status Update Member Status #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/luma:luma-memberships-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

luma-memberships-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Luma Memberships API
  version: 1.0.0
  description: 'API for interacting with Luma''s event platform.


    ## Rate Limits


    The Luma API uses a per-minute rate limit shared across `GET` and `POST` requests:


    - **Calendar API keys** and OAuth tokens: **200 requests/minute** per calendar.

    - **Organization API keys**: **500 requests/minute** per organization.


    When you exceed the limit the API returns `429 Too Many Requests`. Back off before retrying.'
  contact:
    name: Luma Support
    url: https://help.luma.com
  license:
    name: Proprietary
servers:
- url: https://public-api.luma.com
  description: Production server
security:
- apiKeyAuth: []
tags:
- name: Memberships
paths:
  /v1/memberships/tiers/list:
    get:
      tags:
      - Memberships
      summary: List Membership Tiers
      parameters:
      - name: pagination_cursor
        in: query
        required: false
        schema:
          description: Value of `next_cursor` from a previous request.
          type: string
        description: Value of `next_cursor` from a previous request.
      - name: pagination_limit
        in: query
        required: false
        schema:
          description: The number of items to return. The server will enforce a maximum number.
          type: number
        description: The number of items to return. The server will enforce a maximum number.
      description: List the calendar's membership tiers, including hidden ones (see is_hidden).
      responses:
        '200':
          description: Successful response.
          content:
            application/json:
              schema:
                $schema: https://json-schema.org/draft/2020-12/schema
                type: object
                properties:
                  entries:
                    type: array
                    items:
                      $ref: '#/components/schemas/MembershipTier'
                  has_more:
                    type: boolean
                  next_cursor:
                    type: string
                required:
                - entries
                - has_more
      operationId: getV1MembershipsTiersList
      x-operation-id-source: derived
  /v1/memberships/members/add:
    post:
      tags:
      - Memberships
      summary: Add Member to Tier
      description: Add a user to a membership tier. For paid tiers, set skip_payment to true if you are handling payment externally.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $schema: https://json-schema.org/draft/2020-12/schema
              type: object
              properties:
                email:
                  type: string
                  format: email
                  pattern: ^(?:[A-Za-z0-9_'+\-]+\.)*[A-Za-z0-9_'+\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$
                membership_tier_id:
                  type: string
                registration_answers:
                  type: array
                  items:
                    anyOf:
                    - type: object
                      properties:
                        label:
                          type: string
                        question_id:
                          type: string
                        value:
                          type: boolean
                        question_type:
                          type: string
                          const: agree-check
                      required:
                      - label
                      - question_id
                      - value
                      - question_type
                    - type: object
                      properties:
                        label:
                          type: string
                        question_id:
                          type: string
                        value:
                          type: object
                          properties:
                            company:
                              type:
                              - string
                              - 'null'
                            job_title:
                              type:
                              - string
                              - 'null'
                        question_type:
                          type: string
                          const: company
                      required:
                      - label
                      - question_id
                      - value
                      - question_type
                    - type: object
                      properties:
                        label:
                          type: string
                        question_id:
                          type: string
                        value:
                          type:
                          - string
                          - 'null'
                        question_type:
                          type: string
                          const: phone-number
                      required:
                      - label
                      - question_id
                      - value
                      - question_type
                    - type: object
                      properties:
                        label:
                          type: string
                        question_id:
                          type: string
                        value:
                          type:
                          - string
                          - 'null'
                        question_type:
                          type: string
                          const: select
                        multiple:
                          anyOf:
                          - type: boolean
                            const: false
                          - type: 'null'
                      required:
                      - label
                      - question_id
                      - value
                      - question_type
                    - type: object
                      properties:
                        label:
                          type: string
                        question_id:
                          type: string
                        value:
                          anyOf:
                          - type: array
                            items:
                              type: string
                          - type: 'null'
                        question_type:
                          type: string
                          const: select
                        multiple:
                          type: boolean
                          const: true
                      required:
                      - label
                      - question_id
                      - value
                      - question_type
                      - multiple
                    - type: object
                      properties:
                        label:
                          type: string
                        question_id:
                          type: string
                        value:
                          anyOf:
                          - anyOf:
                            - type: string
                            - type: boolean
                              const: true
                          - type: 'null'
                        question_type:
                          type: string
                          const: terms
                      required:
                      - label
                      - question_id
                      - value
                      - question_type
                    - type: object
                      properties:
                        label:
                          type: string
                        question_id:
                          type: string
                        value:
                          type:
                          - string
                          - 'null'
                        question_type:
                          anyOf:
                          - type: string
                            const: github
                          - type: string
                            const: instagram
                          - type: string
                            const: linkedin
                          - type: string
                            const: telegram
                          - type: string
                            const: text
                          - type: string
                            const: twitter
                          - type: string
                            const: youtube
                        multiline:
                          type:
                          - boolean
                          - 'null'
                      required:
                      - label
                      - question_id
                      - value
                      - question_type
                    - type: object
                      properties:
                        label:
                          type: string
                        question_id:
                          type: string
                        value:
                          type:
                          - string
                          - 'null'
                        question_type:
                          type: string
                          const: url
                      required:
                      - label
                      - question_id
                      - value
                      - question_type
                skip_payment:
                  description: Set to true for paid tiers when handling payment externally. Required for paid tiers.
                  type: boolean
              required:
              - email
              - membership_tier_id
      responses:
        '200':
          description: Successful response.
          content:
            application/json:
              schema:
                $schema: https://json-schema.org/draft/2020-12/schema
                type: object
                properties:
                  membership_id:
                    type: string
                  status:
                    type: string
                    enum:
                    - approved
                    - pending
                    - approved-pending-payment
                    - declined
                required:
                - membership_id
                - status
      operationId: postV1MembershipsMembersAdd
      x-operation-id-source: derived
  /v1/memberships/members/update-status:
    post:
      tags:
      - Memberships
      summary: Update Member Status
      description: Update a member's membership status. Approving a paid tier member captures their payment. Declining cancels any active subscription.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $schema: https://json-schema.org/draft/2020-12/schema
              type: object
              properties:
                user_id:
                  type: string
                  description: User ID (e.g., 'usr-xxx') or email address
                status:
                  type: string
                  enum:
                  - approved
                  - declined
              required:
              - user_id
              - status
      responses:
        '200':
          description: Successful response.
          content:
            application/json:
              schema:
                type: object
                description: Empty response
                properties: {}
                additionalProperties: false
      operationId: postV1MembershipsMembersUpdateStatus
      x-operation-id-source: derived
components:
  schemas:
    Currency:
      type: string
      enum:
      - solana_sol
      - solana_usdc
      - aed
      - afn
      - all
      - amd
      - ang
      - aoa
      - ars
      - aud
      - awg
      - azn
      - bam
      - bbd
      - bdt
      - bgn
      - bhd
      - bif
      - bmd
      - bnd
      - bob
      - brl
      - bsd
      - bwp
      - byn
      - bzd
      - cad
      - cdf
      - chf
      - clp
      - cny
      - cop
      - crc
      - cve
      - czk
      - djf
      - dkk
      - dop
      - dzd
      - egp
      - etb
      - eur
      - fjd
      - fkp
      - gbp
      - gel
      - ghs
      - gip
      - gmd
      - gnf
      - gtq
      - gyd
      - hkd
      - hnl
      - htg
      - huf
      - idr
      - ils
      - inr
      - isk
      - jmd
      - jod
      - jpy
      - kes
      - kgs
      - khr
      - kmf
      - krw
      - kwd
      - kyd
      - kzt
      - lak
      - lbp
      - lkr
      - lrd
      - lsl
      - mad
      - mdl
      - mga
      - mkd
      - mmk
      - mnt
      - mop
      - mur
      - mvr
      - mwk
      - mxn
      - myr
      - mzn
      - nad
      - ngn
      - nio
      - nok
      - npr
      - nzd
      - omr
      - pab
      - pen
      - pgk
      - php
      - pkr
      - pln
      - pyg
      - qar
      - ron
      - rsd
      - rub
      - rwf
      - sar
      - sbd
      - scr
      - sek
      - sgd
      - shp
      - sle
      - sos
      - srd
      - std
      - szl
      - thb
      - tjs
      - tnd
      - top
      - try
      - ttd
      - twd
      - tzs
      - uah
      - ugx
      - usd
      - uyu
      - uzs
      - vnd
      - vuv
      - wst
      - xaf
      - xcd
      - xof
      - xpf
      - yer
      - zar
      - zmw
    RegistrationQuestion:
      anyOf:
      - type: object
        properties:
          id:
            type: string
          label:
            type: string
          required:
            type: boolean
          source:
            type: object
            properties:
              type:
                type: string
                const: calendar
              calendar_api_id:
                type: string
              question_id:
                type: string
            required:
            - type
            - calendar_api_id
            - question_id
          question_type:
            type: string
            const: agree-check
        required:
        - id
        - label
        - required
        - question_type
      - type: object
        properties:
          id:
            type: string
          label:
            type: string
          required:
            type: boolean
          source:
            type: object
            properties:
              type:
                type: string
                const: calendar
              calendar_api_id:
                type: string
              question_id:
                type: string
            required:
            - type
            - calendar_api_id
            - question_id
          question_type:
            type: string
            const: company
          collect_job_title:
            type:
            - boolean
            - 'null'
          job_title_label:
            type:
            - string
            - 'null'
        required:
        - id
        - label
        - required
        - question_type
      - type: object
        properties:
          id:
            type: string
          label:
            type: string
          required:
            type: boolean
          source:
            type: object
            properties:
              type:
                type: string
                const: calendar
              calendar_api_id:
                type: string
              question_id:
                type: string
            required:
            - type
            - calendar_api_id
            - question_id
          question_type:
            type: string
            const: github
        required:
        - id
        - label
        - required
        - question_type
      - type: object
        properties:
          id:
            type: string
          label:
            type: string
          required:
            type: boolean
          source:
            type: object
            properties:
              type:
                type: string
                const: calendar
              calendar_api_id:
                type: string
              question_id:
                type: string
            required:
            - type
            - calendar_api_id
            - question_id
          question_type:
            type: string
            const: instagram
        required:
        - id
        - label
        - required
        - question_type
      - type: object
        properties:
          id:
            type: string
          label:
            type: string
          required:
            type: boolean
          source:
            type: object
            properties:
              type:
                type: string
                const: calendar
              calendar_api_id:
                type: string
              question_id:
                type: string
            required:
            - type
            - calendar_api_id
            - question_id
          question_type:
            type: string
            const: linkedin
        required:
        - id
        - label
        - required
        - question_type
      - type: object
        properties:
          id:
            type: string
          label:
            type: string
          required:
            type: boolean
          source:
            type: object
            properties:
              type:
                type: string
                const: calendar
              calendar_api_id:
                type: string
              question_id:
                type: string
            required:
            - type
            - calendar_api_id
            - question_id
          question_type:
            type: string
            const: phone-number
        required:
        - id
        - label
        - required
        - question_type
      - type: object
        properties:
          id:
            type: string
          label:
            type: string
          required:
            type: boolean
          source:
            type: object
            properties:
              type:
                type: string
                const: calendar
              calendar_api_id:
                type: string
              question_id:
                type: string
            required:
            - type
            - calendar_api_id
            - question_id
          question_type:
            type: string
            const: select
          options:
            maxItems: 250
            type: array
            items:
              type: string
          multiple:
            description: When true, guests can pick more than one option.
            type:
            - boolean
            - 'null'
        required:
        - id
        - label
        - required
        - question_type
        - options
      - type: object
        properties:
          id:
            type: string
          label:
            type: string
          required:
            type: boolean
          source:
            type: object
            properties:
              type:
                type: string
                const: calendar
              calendar_api_id:
                type: string
              question_id:
                type: string
            required:
            - type
            - calendar_api_id
            - question_id
          question_type:
            type: string
            const: telegram
        required:
        - id
        - label
        - required
        - question_type
      - type: object
        properties:
          id:
            type: string
          label:
            type: string
          required:
            type: boolean
          source:
            type: object
            properties:
              type:
                type: string
                const: calendar
              calendar_api_id:
                type: string
              question_id:
                type: string
            required:
            - type
            - calendar_api_id
            - question_id
          question_type:
            type: string
            const: text
          multiline:
            description: When true, guests get a multi-line text area.
            type:
            - boolean
            - 'null'
        required:
        - id
        - label
        - required
        - question_type
      - type: object
        properties:
          id:
            type: string
          label:
            type: string
          required:
            type: boolean
          source:
            type: object
            properties:
              type:
                type: string
                const: calendar
              calendar_api_id:
                type: string
              question_id:
                type: string
            required:
            - type
            - calendar_api_id
            - question_id
          question_type:
            type: string
            const: twitter
        required:
        - id
        - label
        - required
        - question_type
      - type: object
        properties:
          id:
            type: string
          label:
            type: string
          required:
            type: boolean
          source:
            type: object
            properties:
              type:
                type: string
                const: calendar
              calendar_api_id:
                type: string
              question_id:
                type: string
            required:
            - type
            - calendar_api_id
            - question_id
          question_type:
            type: string
            const: url
        required:
        - id
        - label
        - required
        - question_type
      - type: object
        properties:
          id:
            type: string
          label:
            type: string
          required:
            type: boolean
          source:
            type: object
            properties:
              type:
                type: string
                const: calendar
              calendar_api_id:
                type: string
              question_id:
                type: string
            required:
            - type
            - calendar_api_id
            - question_id
          question_type:
            type: string
            const: youtube
        required:
        - id
        - label
        - required
        - question_type
      - type: object
        properties:
          id:
            type: string
          label:
            type: string
          required:
            type: boolean
          question_type:
            type: string
            const: terms
          terms:
            oneOf:
            - type: object
              properties:
                content_type:
                  type: string
                  const: text
                content_md:
                  type: string
                  description: Markdown content for the terms. Luma converts this to rich text internally.
                collect_signature:
                  type: boolean
                require_review:
                  description: When true, guests must open the hosted terms before accepting.
                  type: boolean
              required:
              - content_type
              - content_md
              - collect_signature
            - type: object
              properties:
                content_type:
                  type: string
                  const: link
                url:
                  type: string
                  format: uri
                collect_signature:
                  type: boolean
              required:
              - content_type
              - url
              - collect_signature
        required:
        - id
        - label
        - required
        - question_type
        - terms
    MembershipTier:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        description:
          type:
          - string
          - 'null'
        tint_color:
          description: 'A hex color like ''#bb2dc7''. Shorthand (#rgb) is expanded and alpha channels (#rgba, #rrggbbaa) are stripped.'
          type: string
        access_info:
          oneOf:
          - type: object
            properties:
              type:
                type: string
                const: free
              require_approval:
                type: boolean
            required:
            - type
            - require_approval
          - type: object
            properties:
              type:
                type: string
                const: payment-once
              amount:
                type: number
                exclusiveMinimum: 0
              currency:
                $ref: '#/components/schemas/Currency'
              require_approval:
                type: boolean
            required:
            - type
            - amount
            - currency
            - require_approval
          - type: object
            properties:
              type:
                type: string
                const: payment-recurring
              currency:
                $ref: '#/components/schemas/Currency'
              stripe_account_id:
                type: string
              stripe_product_id:
                type: string
              stripe_monthly_price_id:
                type:
                - string
                - 'null'
              amount_monthly:
                anyOf:
                - type: number
                  exclusiveMinimum: 0
                - type: 'null'
              stripe_yearly_price_id:
                type:
                - string
                - 'null'
              amount_yearly:
                anyOf:
                - type: number
                  exclusiveMinimum: 0
                - type: 'null'
              require_approval:
                type: boolean
            required:
            - type
            - currency
            - stripe_account_id
            - stripe_product_id
            - require_approval
        is_hidden:
          type: boolean
          description: Hidden tiers aren't shown on the calendar page and can't be joined by visitors, but members can still be added via the API.
        registration_questions:
          type: array
          items:
            $ref: '#/components/schemas/RegistrationQuestion'
          description: Questions members answer when joining this tier.
      required:
      - id
      - name
      - description
      - tint_color
      - access_info
      - is_hidden
      - registration_questions
  securitySchemes:
    apiKeyAuth:
      type: apiKey
      in: header
      name: x-luma-api-key
      description: API key to authenticate requests to the Luma API. Generate an API key on your Luma dashboard.
x-provenance:
  method: harvested
  publisher: Luma
  source: https://public-api.luma.com/openapi.json
  note: split by refine-openapis from the provider's own published document, verified by fetch (openapi/_original/*.fetch.json);
    stamped by stamp-openapi-provenance.py (roadmap#793)