{
  "info": {
    "name": "Luma (eventos) — mcp.ai",
    "description": "REST API for the Luma (eventos) MCP. Set {{apiKey}} to a workspace key (sk_live_…) created at https://mcp.ai/settings/api-keys.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "auth": {
    "type": "bearer",
    "bearer": [
      {
        "key": "token",
        "value": "{{apiKey}}",
        "type": "string"
      }
    ]
  },
  "variable": [
    {
      "key": "baseUrl",
      "value": "https://api.mcp.ai/api/luma",
      "type": "string"
    },
    {
      "key": "apiKey",
      "value": "sk_live_...",
      "type": "string"
    }
  ],
  "item": [
    {
      "name": "luma_add_guests",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/add/guests",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "add",
            "guests"
          ]
        },
        "description": "Registers people directly on an event, skipping the public registration form. Each guest needs an email and may have a name. They are added as 'approved' (going) by default, and Luma emails them unles",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"event_id\": \"\",\n  \"guests\": \"\",\n  \"approval_status\": \"\",\n  \"event_ticket_type_id\": \"\",\n  \"send_email\": false,\n  \"account\": \"\",\n  \"event_ids\": \"\",\n  \"event_ticket_type_ids\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "luma_add_host",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/add/host",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "add",
            "host"
          ]
        },
        "description": "Adds a co-host to an event by email. access_level 'manager' (the default) can edit the event, 'check-in' can only check guests in, and 'none' is a credit-only host. is_visible controls whether they ap",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"event_id\": \"\",\n  \"email\": \"\",\n  \"name\": \"\",\n  \"access_level\": \"\",\n  \"is_visible\": false,\n  \"account\": \"\",\n  \"event_ids\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "luma_cancel_event",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/cancel/event",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "cancel",
            "event"
          ]
        },
        "description": "Cancels an event. Called WITHOUT confirm it only previews the impact (how many approved guests, whether there are paid guests) and cancels nothing. Show that preview to the user and only call again wi",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"event_id\": \"\",\n  \"confirm\": false,\n  \"should_refund\": false,\n  \"account\": \"\",\n  \"event_ids\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "luma_create_coupon",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/create/coupon",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "create",
            "coupon"
          ]
        },
        "description": "Creates a discount coupon on an event. The discount is either a percentage (percent_off, 1 to 100) or a fixed amount (cents_off plus currency, where 1000 means R$10.00) - send one, not both. remaining",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"event_id\": \"\",\n  \"code\": \"\",\n  \"percent_off\": 0,\n  \"cents_off\": 0,\n  \"currency\": \"\",\n  \"remaining_count\": 0,\n  \"event_ticket_type_id\": \"\",\n  \"valid_start_at\": \"\",\n  \"valid_end_at\": \"\",\n  \"account\": \"\",\n  \"event_ids\": \"\",\n  \"event_ticket_type_ids\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "luma_create_event",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/create/event",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "create",
            "event"
          ]
        },
        "description": "Creates an event on the connected calendar and returns its id and public URL. Name, start_at and timezone are required; timezone must be an IANA name such as America/Sao_Paulo. To set the venue, first",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"name\": \"\",\n  \"start_at\": \"\",\n  \"end_at\": \"\",\n  \"timezone\": \"\",\n  \"description_md\": \"\",\n  \"visibility\": \"\",\n  \"slug\": \"\",\n  \"cover_url\": \"\",\n  \"max_capacity\": 0,\n  \"waitlist_status\": \"\",\n  \"registration_open\": false,\n  \"show_guest_list\": false,\n  \"location_address\": \"\",\n  \"latitude\": 0,\n  \"longitude\": 0,\n  \"google_place_id\": \"\",\n  \"meeting_url\": \"\",\n  \"location_visibility\": \"\",\n  \"account\": \"\",\n  \"google_place_ids\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "luma_create_ticket_type",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/create/ticket/type",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "create",
            "ticket",
            "type"
          ]
        },
        "description": "Creates a ticket type on an event. type 'free' needs nothing else; type 'paid' needs cents (the price in the smallest currency unit, so 5000 means R$50.00) and a three-letter currency such as brl or u",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"event_id\": \"\",\n  \"name\": \"\",\n  \"type\": \"\",\n  \"cents\": 0,\n  \"currency\": \"\",\n  \"description\": \"\",\n  \"max_capacity\": 0,\n  \"require_approval\": false,\n  \"is_hidden\": false,\n  \"valid_start_at\": \"\",\n  \"valid_end_at\": \"\",\n  \"account\": \"\",\n  \"event_ids\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "luma_find_place",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/find/place",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "find",
            "place"
          ]
        },
        "description": "Turns a place written in plain text into real venue candidates, each with a formatted address and its latitude and longitude. This is the step to run BEFORE creating or updating an event with a physic",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"query\": \"\",\n  \"country_code\": \"\",\n  \"limit\": 0,\n  \"account\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "luma_get_calendar",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/get/calendar",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "get",
            "calendar"
          ]
        },
        "description": "Returns the calendar this API key manages: name, description, public URL, timezone, geo settings and social links. A Luma API key is scoped to one calendar, so this is the workspace every other tool o",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"account\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "luma_get_event",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/get/event",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "get",
            "event"
          ]
        },
        "description": "Opens one event by id and returns the full record: name, description, start and end, timezone, address and coordinates, visibility, capacity, waitlist, cover, ticket setup and the hosts.",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"event_id\": \"\",\n  \"account\": \"\",\n  \"event_ids\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "luma_get_guest",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/get/guest",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "get",
            "guest"
          ]
        },
        "description": "Returns one guest of an event. The identifier can be the guest id (gst-), a ticket key, a guest key (g-) or the person's email address, which makes it the way to look someone up by email.",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"event_id\": \"\",\n  \"id\": \"\",\n  \"account\": \"\",\n  \"event_ids\": \"\",\n  \"ids\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "luma_list_accounts",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/list/accounts",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "list",
            "accounts"
          ]
        },
        "description": "Lists the Luma calendars connected to this install (id, label and nickname). A Luma API key is scoped to one calendar, so each connection is one calendar. Use the returned id or label as the account a",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"account\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "luma_list_contacts",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/list/contacts",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "list",
            "contacts"
          ]
        },
        "description": "Lists the contacts of the connected calendar: everyone who has ever registered for one of its events, with name, email, how many events they attended and revenue. Search by name or email with query an",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"query\": \"\",\n  \"tags\": \"\",\n  \"sort_column\": \"\",\n  \"sort_direction\": \"\",\n  \"pagination_cursor\": \"\",\n  \"pagination_limit\": 0,\n  \"account\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "luma_list_coupons",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/list/coupons",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "list",
            "coupons"
          ]
        },
        "description": "Lists the discount coupons of an event with code, discount, remaining uses and validity window.",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"event_id\": \"\",\n  \"pagination_cursor\": \"\",\n  \"pagination_limit\": 0,\n  \"account\": \"\",\n  \"event_ids\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "luma_list_events",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/list/events",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "list",
            "events"
          ]
        },
        "description": "Lists the events on the connected calendar, newest first by start date, with id, name, start and end time, timezone, location, cover and URL. Filter a window with after and before (ISO 8601 datetimes)",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"after\": \"\",\n  \"before\": \"\",\n  \"status\": \"\",\n  \"access\": \"\",\n  \"sort_direction\": \"\",\n  \"pagination_cursor\": \"\",\n  \"pagination_limit\": 0,\n  \"account\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "luma_list_guests",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/list/guests",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "list",
            "guests"
          ]
        },
        "description": "Lists the guests of an event with name, email, approval status, ticket, registration answers and check-in time. Filter with approval_status ('approved', 'pending_approval', 'invited', 'declined', 'wai",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"event_id\": \"\",\n  \"approval_status\": \"\",\n  \"sort_column\": \"\",\n  \"sort_direction\": \"\",\n  \"pagination_cursor\": \"\",\n  \"pagination_limit\": 0,\n  \"account\": \"\",\n  \"event_ids\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "luma_list_ticket_types",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/list/ticket/types",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "list",
            "ticket",
            "types"
          ]
        },
        "description": "Lists the ticket types of an event with id, name, price, currency, capacity and sale window. Run this before adding guests with a specific ticket or before creating a coupon restricted to one ticket t",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"event_id\": \"\",\n  \"include_hidden\": false,\n  \"account\": \"\",\n  \"event_ids\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "luma_lookup_event",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/lookup/event",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "lookup",
            "event"
          ]
        },
        "description": "Finds an event from its public Luma URL (e.g. https://luma.com/aloha) and returns its id and details. Use this when the user pastes a link instead of an id.",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"url\": \"\",\n  \"event_id\": \"\",\n  \"account\": \"\",\n  \"event_ids\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "luma_send_invites",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/send/invites",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "send",
            "invites"
          ]
        },
        "description": "Sends Luma invitations by email to a list of people. Unlike luma_add_guests this does not register them: they receive an invite and choose to accept. The optional message is limited to 200 characters.",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"event_id\": \"\",\n  \"guests\": \"\",\n  \"message\": \"\",\n  \"account\": \"\",\n  \"event_ids\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "luma_update_event",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/update/event",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "update",
            "event"
          ]
        },
        "description": "Updates an existing event. Only the fields you send change; everything else is left as is. To set the venue, first call luma_find_place with the place in plain text (e.g. 'Pinheiros, Sao Paulo' or 'Mo",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"event_id\": \"\",\n  \"name\": \"\",\n  \"start_at\": \"\",\n  \"end_at\": \"\",\n  \"timezone\": \"\",\n  \"description_md\": \"\",\n  \"visibility\": \"\",\n  \"slug\": \"\",\n  \"cover_url\": \"\",\n  \"max_capacity\": 0,\n  \"waitlist_status\": \"\",\n  \"registration_open\": false,\n  \"show_guest_list\": false,\n  \"location_address\": \"\",\n  \"latitude\": 0,\n  \"longitude\": 0,\n  \"google_place_id\": \"\",\n  \"meeting_url\": \"\",\n  \"location_visibility\": \"\",\n  \"suppress_notifications\": false,\n  \"account\": \"\",\n  \"event_ids\": \"\",\n  \"google_place_ids\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "luma_update_guest_status",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/update/guest/status",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "update",
            "guest",
            "status"
          ]
        },
        "description": "Approves, declines, waitlists or sends a guest back to pending. The guest can be identified by guest id (gst-), ticket key, guest key (g-) or email. Moving a paying guest out of 'approved' requires de",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"event_id\": \"\",\n  \"guest_id\": \"\",\n  \"status\": \"\",\n  \"should_refund\": false,\n  \"send_email\": false,\n  \"message\": \"\",\n  \"account\": \"\",\n  \"event_ids\": \"\",\n  \"guest_ids\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "luma_whoami",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/whoami",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "whoami"
          ]
        },
        "description": "Returns the Luma user the API key belongs to (name, email, avatar). Use it to confirm the connection works and which account is being managed.",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"account\": \"\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    }
  ]
}