Luma Webhook Types API
The Webhook Types API from Luma — 0 operation(s) for webhook types.
The Webhook Types API from Luma — 0 operation(s) for webhook types.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
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.curl "https://apis.io/api/v1/apis/luma-webhook-types-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
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: 3.2.0
info:
title: Luma Webhook Types 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: Webhook Types
paths: {}
webhooks:
event.created:
post:
summary: Event Created
description: Triggered when a new event is created on your calendar.
operationId: webhook_event_created
tags:
- Webhook Types
requestBody:
required: true
content:
application/json:
schema:
$schema: https://json-schema.org/draft/2020-12/schema
type: object
properties:
type:
type: string
const: event.created
data:
type: object
properties:
platform:
type: string
const: luma
id:
type: string
user_id:
type: string
calendar_id:
type: string
start_at:
type: string
format: date-time
pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$
description: ISO 8601 Datetime. For example, 2022-10-19T03:27:13.673Z
duration_interval:
type: string
end_at:
type: string
format: date-time
pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$
description: ISO 8601 Datetime. For example, 2022-10-19T03:27:13.673Z
created_at:
type: string
format: date-time
pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$
description: ISO 8601 Datetime. For example, 2022-10-19T03:27:13.673Z
timezone:
type: string
description: IANA Timezone, e.g. America/New_York. https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
name:
type: string
description:
type: string
description_md:
type: string
geo_address_json:
anyOf:
- type: object
properties:
address:
type: string
city:
anyOf:
- type: string
- type: 'null'
region:
anyOf:
- type: string
- type: 'null'
country:
anyOf:
- type: string
- type: 'null'
city_state:
anyOf:
- type: string
- type: 'null'
full_address:
anyOf:
- type: string
- type: 'null'
google_maps_place_id:
anyOf:
- type: string
- type: 'null'
apple_maps_place_id:
anyOf:
- type: string
- type: 'null'
description:
anyOf:
- type: string
- type: 'null'
required:
- address
- city
- region
- country
- city_state
- full_address
- google_maps_place_id
- apple_maps_place_id
- description
- type: 'null'
coordinate:
anyOf:
- type: object
properties:
longitude:
type: number
latitude:
type: number
required:
- longitude
- latitude
- type: 'null'
description: Latitude and longitude of the event location. Null for online events or when the address can't be geocoded.
meeting_url:
anyOf:
- type: string
- type: 'null'
location_type:
type: string
enum:
- discord
- meet
- twitch
- twitter
- youtube
- zoom
- offline
- missing
- unknown
description: '`offline` for in-person events. Online events have the meeting platform (`zoom`, `meet`, etc.), or `unknown` if we don''t recognize the meeting link. `missing` if the event has no location set.'
location_visibility:
type: string
enum:
- public
- guests-only
description: Whether the event's address is shown to everyone or only to approved guests. This API always returns the full address.
cover_url:
type: string
registration_questions:
type: array
items:
anyOf:
- type: object
properties:
id:
type: string
label:
type: string
required:
type: boolean
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
question_type:
type: string
const: company
collect_job_title:
anyOf:
- type: boolean
- type: 'null'
job_title_label:
anyOf:
- type: string
- type: 'null'
required:
- id
- label
- required
- question_type
- type: object
properties:
id:
type: string
label:
type: string
required:
type: boolean
question_type:
type: string
const: dropdown
options:
maxItems: 250
type: array
items:
type: string
required:
- id
- label
- required
- question_type
- options
- type: object
properties:
id:
type: string
label:
type: string
required:
type: boolean
question_type:
type: string
const: github
required:
- id
- label
- required
- question_type
- type: object
properties:
id:
type: string
label:
type: string
required:
type: boolean
question_type:
type: string
const: instagram
required:
- id
- label
- required
- question_type
- type: object
properties:
id:
type: string
label:
type: string
required:
type: boolean
question_type:
type: string
const: linkedin
required:
- id
- label
- required
- question_type
- type: object
properties:
id:
type: string
label:
type: string
required:
type: boolean
question_type:
type: string
const: long-text
required:
- id
- label
- required
- question_type
- type: object
properties:
id:
type: string
label:
type: string
required:
type: boolean
question_type:
type: string
const: multi-select
options:
maxItems: 250
type: array
items:
type: string
required:
- id
- label
- required
- question_type
- options
- type: object
properties:
id:
type: string
label:
type: string
required:
type: boolean
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
question_type:
type: string
const: telegram
required:
- id
- label
- required
- question_type
- type: object
properties:
id:
type: string
label:
type: string
required:
type: boolean
question_type:
type: string
const: text
required:
- id
- label
- required
- question_type
- type: object
properties:
id:
type: string
label:
type: string
required:
type: boolean
question_type:
type: string
const: twitter
required:
- id
- label
- required
- question_type
- type: object
properties:
id:
type: string
label:
type: string
required:
type: boolean
question_type:
type: string
const: url
required:
- id
- label
- required
- question_type
- type: object
properties:
id:
type: string
label:
type: string
required:
type: boolean
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
url:
type: string
visibility:
type: string
enum:
- public
- members-only
- private
waitlist_status:
type: string
enum:
- disabled
- enabled
description: '`enabled` if the event has a waitlist. New registrations join the waitlist once the event reaches capacity.'
feedback_email:
type: object
properties:
enabled:
type: boolean
description: Whether to send the feedback email.
delay:
description: How long after the event ends to send the feedback email. Defaults to PT0M (immediately). Maximum is P7D (7 days).
type: string
required:
- enabled
description: Settings for the post-event feedback email sent to guests.
geo_latitude:
anyOf:
- type: string
- type: 'null'
deprecated: true
description: Use `coordinate.latitude` instead.
geo_longitude:
anyOf:
- type: string
- type: 'null'
deprecated: true
description: Use `coordinate.longitude` instead.
tags:
type: array
items:
type: object
properties:
id:
type: string
name:
type: string
required:
- id
- name
required:
- platform
- id
- user_id
- calendar_id
- start_at
- duration_interval
- end_at
- created_at
- timezone
- name
- description
- description_md
- geo_address_json
- coordinate
- meeting_url
- location_type
- location_visibility
- cover_url
- url
- visibility
- waitlist_status
- feedback_email
- geo_latitude
- geo_longitude
- tags
required:
- type
- data
responses:
'200':
description: Return a 2xx status to acknowledge receipt of the webhook.
event.updated:
post:
summary: Event Updated
description: Triggered when an event's details are updated (name, time, location, etc.).
operationId: webhook_event_updated
tags:
- Webhook Types
requestBody:
required: true
content:
application/json:
schema:
$schema: https://json-schema.org/draft/2020-12/schema
type: object
properties:
type:
type: string
const: event.updated
data:
type: object
properties:
platform:
type: string
const: luma
id:
type: string
user_id:
type: string
calendar_id:
type: string
start_at:
type: string
format: date-time
pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$
description: ISO 8601 Datetime. For example, 2022-10-19T03:27:13.673Z
duration_interval:
type: string
end_at:
type: string
format: date-time
pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$
description: ISO 8601 Datetime. For example, 2022-10-19T03:27:13.673Z
created_at:
type: string
format: date-time
pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$
description: ISO 8601 Datetime. For example, 2022-10-19T03:27:13.673Z
timezone:
type: string
description: IANA Timezone, e.g. America/New_York. https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
name:
type: string
description:
type: string
description_md:
type: string
geo_address_json:
anyOf:
- type: object
properties:
address:
type: string
city:
anyOf:
- type: string
- type: 'null'
region:
anyOf:
- type: string
- type: 'null'
country:
anyOf:
- type: string
- type: 'null'
city_state:
anyOf:
- type: string
- type: 'null'
full_address:
anyOf:
- type: string
- type: 'null'
google_maps_place_id:
anyOf:
- type: string
- type: 'null'
apple_maps_place_id:
anyOf:
- type: string
- type: 'null'
description:
anyOf:
- type: string
- type: 'null'
required:
- address
- city
- region
- country
- city_state
- full_address
- google_maps_place_id
- apple_maps_place_id
- description
- type: 'null'
coordinate:
anyOf:
- type: object
properties:
longitude:
type: number
latitude:
type: number
required:
- longitude
- latitude
- type: 'null'
description: Latitude and longitude of the event location. Null for online events or when the address can't be geocoded.
meeting_url:
anyOf:
- type: string
- type: 'null'
location_type:
type: string
enum:
- discord
- meet
- twitch
- twitter
- youtube
- zoom
- offline
- missing
- unknown
description: '`offline` for in-person events. Online events have the meeting platform (`zoom`, `meet`, etc.), or `unknown` if we don''t recognize the meeting link. `missing` if the event has no location set.'
location_visibility:
type: string
enum:
- public
- guests-only
description: Whether the event's address is shown to everyone or only to approved guests. This API always returns the full address.
cover_url:
type: string
registration_questions:
type: array
items:
anyOf:
- type: object
properties:
id:
type: string
label:
type: string
required:
type: boolean
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
question_type:
type: string
const: company
collect_job_title:
anyOf:
- type: boolean
- type: 'null'
job_title_label:
anyOf:
- type: string
- type: 'null'
required:
- id
- label
- required
- question_type
- type: object
properties:
id:
type: string
label:
type: string
required:
type: boolean
question_type:
type: string
const: dropdown
options:
maxItems: 250
type: array
items:
type: string
required:
- id
- label
- required
- question_type
- options
- type: object
properties:
id:
type: string
label:
type: string
required:
type: boolean
question_type:
type: string
const: github
required:
- id
- label
- required
- question_type
- type: object
properties:
id:
type: string
label:
type: string
required:
type: boolean
question_type:
type: string
const: instagram
required:
- id
-
# --- truncated at 32 KB (258 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/luma/refs/heads/main/openapi/luma-webhook-types-api-openapi.yml