Luma Memberships API
The Memberships API from Luma — 3 operation(s) for memberships.
The Memberships API from Luma — 3 operation(s) for memberships.
openapi: 3.1.0
info:
title: Luma Calendars 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 available membership tiers for the calendar.
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:
type: object
properties:
id:
type: string
name:
type: string
description:
anyOf:
- type: string
- type: 'null'
tint_color:
description: 'A hex color like ''#bb2dc7''. Alpha channels (#rgba, #rrggbbaa) are automatically 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:
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
require_approval:
type: boolean
required:
- type
- amount
- currency
- require_approval
- type: object
properties:
type:
type: string
const: payment-recurring
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
stripe_account_id:
type: string
stripe_product_id:
type: string
stripe_monthly_price_id:
anyOf:
- type: string
- type: 'null'
amount_monthly:
anyOf:
- type: number
exclusiveMinimum: 0
- type: 'null'
stripe_yearly_price_id:
anyOf:
- type: string
- type: '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
required:
- id
- name
- description
- tint_color
- access_info
has_more:
type: boolean
next_cursor:
type: string
required:
- entries
- has_more
/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-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
answer:
type: boolean
question_type:
type: string
const: agree-check
required:
- label
- question_id
- question_type
- type: object
properties:
label:
type: string
question_id:
type: string
value:
type: object
properties:
company:
anyOf:
- type: string
- type: 'null'
job_title:
anyOf:
- type: string
- type: 'null'
answer:
anyOf:
- type: string
- type: 'null'
answer_company:
anyOf:
- type: string
- type: 'null'
answer_job_title:
anyOf:
- type: string
- type: '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:
anyOf:
- type: string
- type: 'null'
answer:
anyOf:
- type: string
- type: 'null'
question_type:
type: string
const: dropdown
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'
answer:
anyOf:
- type: array
items:
type: string
- type: 'null'
question_type:
type: string
const: multi-select
required:
- label
- question_id
- value
- question_type
- type: object
properties:
label:
type: string
question_id:
type: string
value:
anyOf:
- type: string
- type: 'null'
answer:
anyOf:
- type: string
- type: '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:
anyOf:
- anyOf:
- type: string
- type: boolean
const: true
- type: 'null'
answer:
anyOf:
- anyOf:
- type: string
- type: boolean
const: true
- type: 'null'
question_type:
type: string
const: terms
required:
- label
- question_id
- question_type
- type: object
properties:
label:
type: string
question_id:
type: string
value:
anyOf:
- type: string
- type: 'null'
answer:
anyOf:
- type: string
- type: 'null'
question_type:
anyOf:
- type: string
const: github
- type: string
const: instagram
- type: string
const: linkedin
- type: string
const: long-text
- type: string
const: telegram
- type: string
const: text
- type: string
const: twitter
- type: string
const: youtube
required:
- label
- question_id
- value
- question_type
- type: object
properties:
label:
type: string
question_id:
type: string
value:
anyOf:
- type: string
- type: 'null'
answer:
anyOf:
- type: string
- type: '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
/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
x-stainless-empty-object: true
components:
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.