eventbrite-mcp
Provides comprehensive event management and ticketing capabilities through the Eventbrite API v3, including creating, updating, publishing events, managing ticket classes, orders, attendees, discounts, webhooks, and more.
Supports multi-tenant authentication via Firebase Auth Provider, enabling secure access to Eventbrite tools for different users.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@eventbrite-mcp Create a new tech conference event on Dec 31"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
@prmichaelsen/eventbrite-mcp
An MCP (Model Context Protocol) server that provides comprehensive event management and ticketing capabilities through the Eventbrite API v3.
Note: Not every tool in this repository has been tested. Ticket creation workflow is supported. If other tools fail, please create an issue for that tool.
Features
Event Management: Create, update, publish, delete, cancel, and copy events
Ticket Management: Create, update, and manage ticket classes
Order Management: Retrieve and list orders
Attendee Management: Get and list attendee information
Organization Support: Manage organizations, venues, and members
Discount Management: Create and manage discount codes
Media & Content: Upload media and manage structured content
Webhooks: Create and manage webhooks
Categories & Formats: Access event categories and formats
Inventory Management: Manage inventory tiers
And more: 42 tools total - see
./src/toolsfor complete list
Related MCP server: Eventbrite MCP Server
Installation
Using npx (Recommended)
npx @prmichaelsen/eventbrite-mcpConfiguration
Environment Variables
Create a .env file in your project root or set the following environment variables:
# Required
EVENTBRITE_API_TOKEN=your_eventbrite_api_token
# Optional
EVENTBRITE_API_URL=https://www.eventbriteapi.com/v3 # Default API URL
EVENTBRITE_TIMEOUT=30000 # Request timeout in ms
EVENTBRITE_RETRIES=3 # Number of retry attemptsGetting an Eventbrite API Token
Go to Eventbrite API Keys Page
Sign in to your Eventbrite account
Copy your Private Token
Add it to your MCP client configuration (see below)
Note: You must create your own Eventbrite OAuth application if you need to access other users' data. For personal use, a private token is sufficient.
MCP Client Configuration
Add to your MCP client configuration (e.g., Claude Desktop, Kilo Code):
{
"mcpServers": {
"eventbrite": {
"command": "npx",
"args": ["-y", "@prmichaelsen/eventbrite-mcp"],
"env": {
"EVENTBRITE_API_TOKEN": "your_eventbrite_api_token"
}
}
}
}Tool Examples
create_event
Create a new event on Eventbrite.
Parameters:
name(required): Event namestartTime(required): Start time in ISO 8601 formatendTime(required): End time in ISO 8601 formattimezone(required): Timezone (e.g., "America/New_York")currency(required): Currency code (e.g., "USD")description(optional): Event description (supports HTML)online(optional): Whether this is an online eventlisted(optional): Whether to list publiclycapacity(optional): Maximum capacityorganizationId(optional): Organization ID
Example:
{
"name": "Tech Conference 2024",
"description": "Annual technology conference",
"startTime": "2024-12-31T09:00:00",
"endTime": "2024-12-31T17:00:00",
"timezone": "America/New_York",
"currency": "USD",
"online": false,
"listed": true,
"capacity": 500
}update_event
Update an existing event by event ID. Supports partial updates.
Parameters:
event_id(required): Event IDname(optional): Event name object with html propertysummary(optional): Event summarystart(optional): Start datetime with timezone and utcend(optional): End datetime with timezone and utccurrency(optional): Currency codeonline_event(optional): Is online onlylisted(optional): Publicly searchablePlus 20+ additional optional fields
Example:
{
"event_id": "123456789",
"name": { "html": "Updated Conference Name" },
"summary": "New event description",
"listed": true
}create_ticket_class
Create a ticket class for an event.
Parameters:
eventId(required): The event IDname(required): Ticket class namequantityTotal(required): Total tickets availablefree(optional): Whether the ticket is freecost(optional): Ticket cost in minor units (e.g., cents)currency(optional): Currency codedescription(optional): Ticket descriptionsalesStart(optional): Sales start time (ISO 8601)salesEnd(optional): Sales end time (ISO 8601)
Example:
{
"eventId": "123456789",
"name": "General Admission",
"quantityTotal": 100,
"free": false,
"cost": 5000,
"currency": "USD",
"description": "Standard entry ticket"
}publish_event
Publish an event to make it live and available for ticket sales.
Parameters:
event_id(required): Event ID
Example:
{
"event_id": "123456789"
}All Available Tools
For a complete list of all 42 supported tools, please see ./src/tools directory.
Tool Categories:
Events (9 tools)
Tickets (4 tools)
Orders (2 tools)
Attendees (2 tools)
Organizations (3 tools)
Venues (4 tools)
Discounts (5 tools)
Categories & Formats (6 tools)
Webhooks (3 tools)
Media & Content (4 tools)
Inventory Tiers (5 tools)
Display Settings (2 tools)
Questions (3 tools)
User (1 tool)
API Documentation (1 tool)
Using as a Library
Option 1: MCP-Auth Integration (Multi-Tenant)
For multi-tenant applications using @prmichaelsen/mcp-auth:
import { createEventbriteServer } from '@prmichaelsen/eventbrite-mcp/factory';
import { wrapServer } from '@prmichaelsen/mcp-auth';
const wrappedServer = wrapServer({
serverFactory: (accessToken: string, userId: string) => {
return createEventbriteServer(accessToken, userId);
},
authProvider: new FirebaseAuthProvider({ projectId: 'your-project' }),
tokenResolver: new PlatformTokenResolver({
platformUrl: 'https://your-platform.com',
serviceToken: process.env.PLATFORM_SERVICE_TOKEN
}),
resourceType: 'eventbrite',
transport: { type: 'sse', port: 8080, basePath: '/mcp' }
});
await wrappedServer.start();Option 2: Individual Tool Usage (OpenAI Agents)
Import and use individual tools in your applications:
import { CreateEventTool, EventbriteClient, EventbriteConfig } from '@prmichaelsen/eventbrite-mcp';
// Configure the Eventbrite client
const config: EventbriteConfig = {
apiToken: process.env.EVENTBRITE_API_TOKEN!, // Required
apiUrl: 'https://www.eventbriteapi.com/v3',
timeout: 30000,
retries: 3
};
const client = new EventbriteClient(config);
const createEventTool = new CreateEventTool(client);
// Use the tool
const result = await createEventTool.execute({
name: "My Event",
startTime: "2024-12-31T09:00:00",
endTime: "2024-12-31T17:00:00",
timezone: "America/New_York",
currency: "USD"
});Environment Variables Required:
EVENTBRITE_API_TOKEN: Your Eventbrite API token (required)
All 57 tool classes and the createServer factory function are exported. See src/index.ts for the complete list of exports.
Development
Setup
# Clone the repository
git clone https://github.com/prmichaelsen/eventbrite-mcp.git
cd eventbrite-mcp
# Install dependencies
npm install
# Build the project
npm run build
# Run in development mode with watch
npm run watchProject Structure
eventbrite-mcp/
├── src/
│ ├── server.ts # Main MCP server
│ ├── eventbrite/
│ │ └── client.ts # Eventbrite API client
│ ├── tools/ # MCP tool implementations (42 tools)
│ ├── types/ # TypeScript type definitions
│ └── utils/ # Utility functions
├── agent/ # Development documentation
├── package.json
├── tsconfig.json
└── README.mdTesting
npm testBuilding
npm run buildLicense
MIT
Author
Patrick Michaelsen
Links
Available Tools
81 toolscalculate_item_pricingA
Calculate hypothetical fees for ticket pricing.
ENDPOINT: POST /pricing/calculate_price_for_item/
Calculates Eventbrite fees for given price based on scope (organization, event, ticket_class, assortment_plan).
PARAMETERS:
base_price (string, required): Format "CURRENCY,amount_in_cents"
country (string, required): ISO 3166 2-letter code
scope (object, required): type (organization/event/ticket_class/assortment_plan) and identifier
absorb_fees (boolean): Include fees in base price
absorb_taxes (boolean): Include taxes in base price
payment_type: eventbrite, authnet, paypal
channel: web, atd
ERRORS (400):
PRICING_MODEL_NOT_SUPPORTED, INVALID_CURRENCY_COUNTRY_COMBINATION, BASE_PRICE_TOO_LOW_TO_ABSORB, ARGUMENTS_ERROR
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: scope (required), country (required), base_price (required), channel, +3 more.
cancel_eventA
Cancel an Event.
ENDPOINT: POST /events/{event_id}/cancel/
Returns boolean indicating success or failure.
CANCEL REQUIREMENTS:
Event must not have pending or completed orders
SERIES PARENT EVENTS:
All occurrences must be in valid state to cancel
Canceling parent cancels all occurrences
RESPONSE:
canceled (boolean): true if successfully canceled
POSSIBLE ERRORS (400):
ALREADY_CANCELED: Event already canceled
CANNOT_CANCEL: Event has pending/completed ticket sales that must be refunded first, or series parent has occurrences that cannot be canceled
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: event_id (required).
copy_eventA
Copy an Event, creating duplicate with new Event ID.
ENDPOINT: POST /events/{event_id}/copy/
Creates new Event based on existing Event. Returns Event object for newly created Event.
COPIED ELEMENTS:
Event payment options
Payout method
Refund policy
Tax settings
POSSIBLE ERRORS (400):
INSUFFICIENT_PACKAGE: Need to upgrade package. Go to /users/{user_id}/assortment/
INVALID_END_DATE: End date must be 1 minute to 365 days after start time
INVALID_START_DATE: Start date must be between now and 10 years from now
UNABLE_TO_COPY_EVENT: Currently unable to copy. Recovery not possible
UNSUPPORTED_TIMEZONE: Timezone not supported
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: event_id (required), end, name, start.
create_custom_questionB
Create a custom question for an Event.
ENDPOINT: POST /events/{event_id}/questions/
Returns result as question array.
ERRORS (400):
INSUFFICIENT_PACKAGE: Need to upgrade package
ERRORS (403):
NOT_AUTHORIZED: No permission
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: event_id (required), question (required).
create_default_questionB
Create a default Question for an Event.
ENDPOINT: POST /events/{event_id}/canned_questions/
ERRORS (400):
INSUFFICIENT_PACKAGE: Need to upgrade package
NOT_ALLOWED
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: event_id (required), question (required).
create_discountA
Create a new Discount.
ENDPOINT: POST /organizations/{organization_id}/discounts/
DISCOUNT TYPES:
Public: Displays publicly (single event, no apostrophes/special chars except -_()/)
Coded: Secret code required (no spaces/apostrophes/special chars except -_()/)
Access Code: Secret code for hidden tickets (no spaces/apostrophes/special chars except -_()/)
Hold: Unlock seats on hold
DISCOUNT SCOPE:
event_id + ticket_class_ids: Specific tickets in single event
event_id only: All tickets in single event
ticket_group_id: Ticket Group discount
Neither: All tickets for all organization events (including future)
FIELDS:
code (string, required): Name (public) or code (coded/access)
type (string, required): access, coded, public, hold
amount_off (decimal): Fixed amount 0.01-99999.99 (event currency, 2 decimals)
percent_off (decimal): Percentage 1.00-100.00 (2 decimals)
quantity_available (integer): Usage limit (0 = unlimited)
start_date (local datetime): Usable from (empty = immediately)
start_date_relative (integer): Seconds before event start
end_date (datetime): Usable until (empty = event end_date)
end_date_relative (integer): Seconds before event start
ticket_class_ids (list): Ticket Class IDs (empty = all)
event_id (string): Single Event ID
ticket_group_id (string): Ticket Group ID
hold_ids (list): Hold IDs to unlock
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: code (required), type (required), organization_id (required), end_date, +8 more.
create_eventA
Create a new Event.
ENDPOINT: POST /organizations/{organization_id}/events/
By default, this API creates an event that occurs once. In order to create a series of events with multiple occurrences (also known as a "repeating event" or "recurring event"), you must first create one event to serve as the "series parent", then add occurrences to the series parent. Creating the series parent is done by calling the Create Event API with the is_series attribute set to True. Occurrences can then be added to the newly created series parent, using the Event Schedule API.
REQUIRED PARAMETERS:
organization_id (string): ID of the Organization that owns the Event
name (htmltext, required): Event name. Value cannot be empty nor whitespace
start (datetime-tz-utc, required): Start date/time of the event with timezone and UTC
end (datetime-tz-utc, required): End date/time of the event with timezone and UTC
currency (string, required): The ISO 4217 currency code for this event (e.g., USD, EUR, GBP)
OPTIONAL PARAMETERS:
summary (string, optional): Event summary. This is a plaintext field and will have any supplied HTML removed from it. Maximum of 140 characters, mutually exclusive with description
description (htmltext, optional, DEPRECATED): Event description (contents of the event page). May be long and have significant formatting. Please refer to the event description tutorial to learn about the new way to create an event description
hide_start_date (boolean, optional): Whether the start date should be hidden
hide_end_date (boolean, optional): Whether the end date should be hidden
online_event (boolean, optional): If this event doesn't have a venue and is only held online (default: false)
organizer_id (string): ID of the event organizer
logo_id (string, optional): Image ID of the event logo
venue_id (string, optional): Event venue ID
format_id (string, optional): Event format
category_id (string, optional): Event category
subcategory_id (string, optional): Event subcategory (US only)
listed (boolean, optional): Is this event publicly searchable on Eventbrite? (default: true)
shareable (boolean, optional): Can this event show social sharing buttons? (default: false)
invite_only (boolean): Can only people with invites see the event page?
show_remaining (boolean, optional): If the remaining number of tickets is publicly visible on the event page
password (string): Password needed to see the event in unlisted mode
capacity (number, optional): Set specific capacity (if omitted, sums ticket capacities)
is_reserved_seating (boolean, optional): If the event is reserved seating
is_series (boolean, optional): If the event is part of a series. Specifying this attribute as True during event creation will always designate the event as a series parent, never as a series occurrence. Series occurrences must be created through the schedules API and cannot be created using the events API
show_pick_a_seat (boolean, optional): For reserved seating event, if attendees can pick their seats
show_seatmap_thumbnail (boolean, optional): For reserved seating event, if venue map thumbnail visible on the event page
show_colors_in_seatmap_thumbnail (boolean, optional): For reserved seating event, if venue map thumbnail should have colors on the event page
source (string, optional): Source of the event (defaults to API)
locale (Locale, optional): Indicates event language on Event's listing page (default: en_US)
SUPPORTED LOCALES: de_AT, de_CH, de_DE, en_AU, en_CA, en_DK, en_FI, en_GB, en_HK, en_IE, en_IN, en_NZ, en_SE, en_US, es_AR, es_CL, es_CO, es_ES, fr_BE, fr_CA, fr_CH, fr_FR, hi_IN, it_IT, nl_BE, nl_NL, pt_BR, pt_PT
ERROR RESPONSES:
400 DATE_CONFLICT: Start date cannot be after end date
400 DIFFERENT_TIMEZONES: You have passed different timezones for the start and end times; they must be the same
400 INVALID_DATE: Start and end dates cannot be in the past
400 INVENTORY_TYPE_CONFLICT: Only a single inventory type may be set at once
400 INVITE_CONFLICT: You have set both listed and invite_only; these two options are mutually exclusive, and you are only allowed to set one
400 NO_DEFAULT_ORGANIZER: The event does not have an organizer ID, and no default organizer could be found for the user
400 NO_PACKAGE_SELECTED: You need to select a package to create an event. Go to /organizations/{organization_id}/assortment/ to select a package
400 NO_VENUE: You have attempted to create an event without a venue
400 PASSWORD_CONFLICT: You have set both listed and password; these two options are mutually exclusive, and you are only allowed to set one
400 SHARE_INVITE_CONFLICT: You have set both shareable and invite_only; these two options are mutually exclusive, and you are only allowed to set one
400 UNSUPPORTED_TIMEZONE: The time zone for the start and end times does not exist
400 VENUE_AND_ONLINE: You have set both online_event and venue_id; an event can either have a venue or be online, but not both at the same time
400 SUMMARY_DESCRIPTION_CONFLICT: You have set values for both summary and description; these two options are mutually exclusive, and you may only set one
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: name (required), endTime (required), currency (required), timezone (required), +26 more.
create_event_scheduleA
Create an event schedule for series parent.
ENDPOINT: POST /events/{event_id}/schedules/
Adds occurrences to series parent according to pattern. Requires series parent event.
PARAMETERS:
occurrence_duration: Duration in seconds
recurrence_rule: iCalendar RFC format with DTSTART
ERRORS (400):
MISSING, INVALID, DTSTART_MISSING, RECURRENCE_RULE_DATES_NOT_IN_UTC, DTSTART_OUTSIDE_PERMITTED_RANGE, LAST_OCCURRENCE_START_EXCEEDS_LIMIT, EXCEEDS_MAX_OCCURRENCES
ERRORS (403):
NOT_AUTHORIZED
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: event_id (required), recurrence_rule (required), occurrence_duration (required).
create_inventory_tierA
Create a new Inventory Tier for an Event.
ENDPOINT: POST /events/{event_id}/inventory_tiers/
Max 100 tiers per event.
ERRORS (400):
EXCEED_MAXIMUM_INVENTORY_TIERS: Cannot create more than 100 tiers
EXCEED_MAXIMUM_TICKET_RULE_TICKETS: Ticket rule tickets cannot exceed 1000
ARGUMENTS_ERROR
ERRORS (403):
NOT_AUTHORIZED
ERRORS (404):
NOT_FOUND: Event doesn't exist
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: event_id (required), name, capacity_total, quantity_total.
create_multiple_inventory_tiersA
Create Multiple Inventory Tiers (Bulk)
Endpoint: POST /events/{event_id}/inventory_tiers/
Creates multiple inventory tiers in a single request for efficient bulk operations.
Authentication: Requires a valid Eventbrite API token with event management permissions.
Use Cases:
Set up multiple inventory tiers at once during event creation
Bulk import inventory tier configurations
Efficiently configure complex inventory structures
Reduce API calls when setting up many tiers
Inventory Tier Fields:
name: Tier name (required)
quantity: Number of tickets in this tier
price: Price for this tier (if applicable)
sales_start: When sales begin for this tier
sales_end: When sales end for this tier
minimum_quantity: Minimum tickets per order
maximum_quantity: Maximum tickets per order
Limits:
Maximum 100 inventory tiers per event
All tiers must belong to the same event
Error Codes:
400: Invalid tier data or exceeds maximum tiers
401: Authentication required
403: Insufficient permissions
404: Event not found
Inputs: event_id (required), inventory_tiers (required).
create_seat_mapA
Create Seat Map for reserved seating event by copying existing.
ENDPOINT: POST /events/{event_id}/seatmaps/
Event must be new reserved seating. Once created, cannot create again.
ERRORS (403):
NOT_AUTHORIZED: Unauthorized to view source or create on event
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: event_id (required), source_seatmap_id (required).
create_text_overridesB
Create Text Overrides for Organization, Venue, or Event.
ENDPOINT: POST /organizations/{organization_id}/text_overrides/
PARAMETERS:
locale: Locale (optional, uses event locale or default)
venue_id: Venue ID (optional)
event_id: Event ID (optional)
strings: Array of text override objects (required)
ERRORS (400):
MISSING, INVALID
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: strings (required), organization_id (required), locale, event_id, +1 more.
create_ticket_classA
Create a new Ticket Class.
ENDPOINT: POST /events/{event_id}/ticket_classes/
TICKET CLASS OBJECT: The Ticket Class object represents a possible ticket class (i.e. ticket type) for an Event. Typically, multiple different types of tickets for an Event can be purchased in one transaction. These ticket types do not necessarily map directly to the one Attendee per one ticket model.
TICKET CLASS TYPES:
Free: Ticket Classes that have no cost or currency. An Event with only free Ticket Classes is a free Event and doesn't require payout information
Paid: Ticket Classes with an associated cost in the Event's currency. Currency is specified in the Event object and is duplicated in the Ticket Class object
Donation: Order owner is prompted to enter at their own discretion an amount to donate during checkout. There is no fixed cost of donation
IMPORTANT NOTES:
After May 7, 2020, you must provide an inventory_tier_id as part of your request for any ticket_classes you are creating or updating for a tiered event
Add-On creation: First create an Add-On Inventory Tier with count_against_event_capacity set to false, then provide the inventory_tier_id when creating a new Ticket Class
REQUIRED PARAMETERS:
event_id (string, required): Event ID
name (string, optional): Name of this ticket type
quantity_total (number, optional): Total available number of this ticket, required for non-donation and non-tiered ticket classes. For normal ticket, null or 0 is not allowed. For donation ticket, null or 0 means unlimited. For tiered inventory ticket, null or 0 means capacity is only limited by tier capacity and/or event capacity
OPTIONAL PARAMETERS:
cost (string, optional): Cost of the ticket (currently currency must match event currency). Format: "USD,4500" for $45.00. The value is in minor currency units (cents for USD)
description (string, optional): Description of the ticket
sorting (number, optional): Unsigned integer in the order ticket classes are sorted by
capacity (number, optional, nullable): Total available number of this ticket. For normal ticket, null or 0 is not allowed. For donation ticket, null or 0 means unlimited. For tiered inventory ticket, null or 0 means capacity is only limited by tier capacity and/or event capacity
donation (boolean, optional): Is this a donation? (user-supplied cost)
free (boolean, optional): Is this a free ticket?
include_fee (boolean, optional): Absorb the fee into the displayed cost
split_fee (boolean, optional): Absorb the payment fee, but show the eventbrite fee
hide_description (boolean, optional): Hide the ticket description on the event page
sales_channels (array, optional): A list of all supported sales channels (["online"], ["online", "atd"], ["atd"])
sales_start (datetime, optional): When the ticket is available for sale (leave empty for 'when event published')
sales_end (datetime, optional): When the ticket stops being on sale (leave empty for 'one hour before event start'). Cannot be set on series parent tickets
sales_end_relative (object, optional): Relative values used to calculate ticket sales_end. Can only be used for series parent tickets • relative_to_event (enum, required): start_time or end_time • offset (number, required): The amount of time in seconds that the ticket sales are offset before the event start or end. Nonnegative number
sales_start_after (string, optional): The ID of another ticket class - when it sells out, this class will go on sale
minimum_quantity (number, optional): Minimum number per order
maximum_quantity (number): Maximum number per order
auto_hide (boolean, optional): Hide this ticket when it is not on sale
auto_hide_before (datetime, optional): Override reveal date for auto-hide
auto_hide_after (datetime, optional): Override re-hide date for auto-hide
has_pdf_ticket (boolean, optional): Whether to include pdf ticket or not
hidden (boolean, optional): Hide this ticket
order_confirmation_message (string, optional): Order message per ticket type
delivery_methods (string, optional): A list of the available delivery methods for this ticket class
inventory_tier_id (string, optional): Optional ID of Inventory Tier with which to associate the ticket class
ERROR RESPONSES:
400 AUTO_HIDE_NOT_SET: You must select an auto hide setting
400 BAD_QUANTITIES: The sum of tickets across ticket classes is not equal to the sum of total tickets available
400 COST_GREATER_THAN_FEE: The cost of the ticket class must be greater than the fee
400 CURRENCY_MISMATCH: Event currency ticket currency must match
400 DONATION_AND_COST: A ticket cannot be a donation and a charged ticket
400 DONATION_AND_FREE: A ticket cannot be a donation and a free ticket
400 DONATION_AND_MIN_QUANTITY: Please set a minimum quantity for donation ticket
400 FREE_AND_COST: A ticket cannot be a free ticket and a charged ticket
400 INSUFFICIENT_PACKAGE: You need to upgrade your package to create more than one ticket
400 INVALID_DELIVERY_METHOD: A ticket under this event organization cannot have this delivery method
400 INVALID_EVENT: This event is not qualified to have tickets
400 INVALID_EVENT_ID: Event id must match the event id associated with the ticket
400 INVALID_INVENTORY_TIER_ID: You cannot change the inventory tier of a ticket
400 INVALID_TICKET: You cannot update a child ticket directly
400 NO_COST: A price must be set for a charged ticket
400 NO_QUANTITY_TOTAL: A quantity total must be set for this ticket
400 SPLIT_AND_INCLUDE: You cannot split fees and include them in the price of the ticket
400 SPLIT_FEES_DEPRECATED: This functionality is being deprecated
400 SALES_END_RELATIVE_TOO_FAR_IN_PAST: The ticket sales_end relative can't result in a date < 2000
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: name (required), eventId (required), quantityTotal (required), cost, +15 more.
create_venueC
Create new Venue under an Organization.
ENDPOINT: POST /organizations/{organization_id}/venues/
VENUE FIELDS:
name (string, required): Venue name
address (object): Venue address with address_1, city, region, postal_code, country
age_restriction (string): Age restriction
capacity (number): Maximum tickets
latitude (string): Latitude
longitude (string): Longitude
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: name (required), organization_id (required), address, capacity, +1 more.
create_webhookB
Create a Webhook by Organization ID.
ENDPOINT: POST /organizations/{organization_id}/webhooks/
Webhook represents webhook associated with Organization.
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: actions (required), endpoint_url (required), organization_id (required), event_id.
delete_custom_questionA
Delete a custom Question.
ENDPOINT: DELETE /events/{event_id}/questions/{question_id}/
ERRORS (403):
NOT_AUTHORIZED: No permission
ERRORS (404):
NOT_FOUND: Question doesn't exist
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: event_id (required), question_id (required).
delete_default_questionA
Delete Default Question by ID.
ENDPOINT: DELETE /events/{event_id}/canned_questions/{question_id}/
Deactivates canned question for event.
ERRORS (404):
NOT_FOUND: Event doesn't exist
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: event_id (required), question_id (required).
delete_discountA
Delete a Discount.
ENDPOINT: DELETE /discounts/{discount_id}/
Only unused discounts can be deleted. Cannot be restored after deletion.
ERRORS (400):
DISCOUNT_CANNOT_BE_DELETED: Discount has been used, cannot delete
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: discount_id (required).
delete_eventA
Delete an Event if the delete is permitted.
ENDPOINT: DELETE /events/{event_id}/
Returns a boolean indicating the success or failure of the delete action.
To delete an Event, the Event must not have any pending or completed orders.
If the event is a series parent, all series occurrences must be in a valid state to be deleted. Deleting the series parent will delete all series occurrences.
WARNING: This action cannot be undone. Deleted events cannot be recovered.
DELETION REQUIREMENTS:
Event must not have any pending orders
Event must not have any completed orders
For series parents: all occurrences must meet deletion requirements
SERIES PARENT EVENTS:
All occurrences must be in valid state for deletion
Deleting parent deletes all occurrences
Cannot delete if any occurrence has pending/completed orders
RESPONSE: Returns object with:
deleted (boolean): true if successfully deleted
POSSIBLE ERRORS (400):
ALREADY_DELETED: Event has already been deleted
CANNOT_DELETE: Cannot delete event that has pending or completed orders, or series parent where any occurrence has pending or completed orders
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: event_id (required).
delete_inventory_tierA
Delete an Inventory Tier.
ENDPOINT: DELETE /events/{event_id}/inventory_tiers/{inventory_tier_id}/
ERRORS (400):
HAS_ATTENDEES: Cannot delete if purchased by attendees
IS_STARTED_AFTER: Another ticket starts when this ends
LAST_TICKET: Cannot delete last ticket while event live
HAS_SEAT_ASSIGNMENTS: Cannot delete if seats still assigned
ERRORS (403):
NOT_AUTHORIZED
ERRORS (404):
NOT_FOUND: Event or tier doesn't exist
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: event_id (required), inventory_tier_id (required).
delete_webhookB
Delete a Webhook by ID.
ENDPOINT: DELETE /webhooks/{id}/
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: webhook_id (required).
get_api_docsA
Returns the complete Eventbrite API Blueprint documentation. Contains all endpoints, parameters, validation rules, error codes, and data structures for the Eventbrite API v3 (6933 lines).
Inputs: no named parameters.
get_attendeeA
Retrieve an Attendee by Attendee ID.
ENDPOINT: GET /events/{event_id}/attendees/{attendee_id}/
The Attendee object represents ticket holder details for an Event. One Attendee per sold ticket. If Event only collects Order owner info (default), all Attendees have same info except barcodes and Ticket Class ID.
Attendee objects are private - only available to User and Order owner.
ATTENDEE FIELDS:
created (datetime): When order placed/attendee created
changed (datetime): Last change to attendee
ticket_class_id (string): Ticket Class used when registering
variant_id (string): Variant of Ticket Class
ticket_class_name (string): Name of Ticket Class
quantity (integer): Always 1
costs (object): Ticket cost breakdown
profile (object): Attendee basic profile
addresses (object): Attendee addresses
questions (array, optional): Custom questions
answers (array, optional): Answers to custom questions
barcodes (array): Entry bar codes
team (object, optional): Team information
affiliate (string, optional): Affiliate code
checked_in (boolean): true = Checked in
cancelled (boolean): true = Cancelled
refunded (boolean): true = Receives refund
status (string): Attendee status
event_id (string): Event ID
order_id (string): Order ID
guestlist_id (string): Guest list ID (null = not a guest)
invited_by (string): Who invited guest (null = not a guest)
delivery_method (string): will_call, electronic, standard_shipping, third_party_shipping
ATTENDEE COSTS:
base_price (currency): Price excluding fees/tax (don't expose if include_fee used)
eventbrite_fee (currency): Fee (don't expose if include_fee used)
tax (currency): Tax amount
payment_fee (currency): Payment processing fee
gross (currency): Total cost (base_price + eventbrite_fee + payment_fee + tax)
ATTENDEE PROFILE:
name (string): Full name (use instead of first_name/last_name)
email (string): Email address
first_name, last_name (string): Use name instead
prefix, suffix (string, optional): Title/honorific
age (integer, optional): Age
job_title, company, website, blog (string, optional)
gender (string, optional): male or female
birth_date (date, optional): Birth date
cell_phone (string, optional): Mobile number
ATTENDEE ADDRESSES:
home, ship, work (address, optional): Home, shipping, work addresses
ATTENDEE BARCODES:
barcode (string): Barcode contents (null if: printable tickets off, delivery method mismatch, not electronic delivery)
status (string): unused, used, or refunded
created, changed (datetime): Creation and last change times
is_printed (boolean): true = Ticket printed
AVAILABLE EXPANSIONS:
event: Attendee's Event
order: Attendee's Order
promotional_code: Promo code applied to Order
assigned_number: Bib number for race/endurance events
answers: Answers to custom questions
survey: Custom questions presented
survey_responses: Responses to survey questions
assigned_unit: Seating assignment details (reserved seating events)
contact_list_preferences: Email opt-in preferences
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: event_id (required), attendee_id (required).
get_attendee_reportA
Retrieve an Attendee Report by Event ID or status.
ENDPOINT: GET /reports/attendees/
Same parameters as sales report.
ERRORS (400):
ARGUMENTS_ERROR, CURRENCY_MISMATCH, INVALID, INVALID_PARAMETER
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: event_ids (required), end_date, timezone, start_date, +1 more.
get_capacity_tierA
Retrieve capacity tier for an event.
ENDPOINT: GET /events/{event_id}/capacity_tier/
Capacity tier for GA holds against event capacity (not tiered inventory).
ERRORS (403):
NOT_AUTHORIZED
ERRORS (404):
NOT_FOUND: Event doesn't exist
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: event_id (required).
get_categoryA
Get a category by ID.
ENDPOINT: GET /categories/{id}/
Category is an overarching category that an event falls into (vertical). Examples: Music, Endurance.
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: category_id (required).
get_current_userA
Get Current User
Endpoint: GET /users/me/
Returns information about the currently authenticated user (the user whose API token is being used).
Authentication: Requires a valid Eventbrite API token.
Use Cases:
Verify authentication and token validity
Get current user's ID for other API calls
Display user information in applications
Check user's name and email
Verify user permissions and access
Response Fields:
id: User ID
name: User's full name
first_name: User's first name
last_name: User's last name
email: User's email address
emails: Array of email objects with verification status
image_id: User's profile image ID
Error Codes:
401: Authentication required or invalid token
403: Token lacks required permissions
Inputs: no named parameters.
get_custom_questionB
Retrieve a Custom Question by ID.
ENDPOINT: GET /events/{event_id}/questions/{question_id}/
ERRORS (404):
NOT_FOUND: Question doesn't exist
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: event_id (required), question_id (required).
get_default_questionA
Retrieve a Default Question by ID.
ENDPOINT: GET /events/{event_id}/canned_questions/{question_id}/
ERRORS (404):
NOT_FOUND: Event doesn't exist
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: event_id (required), question_id (required).
get_discountC
Retrieve a Discount by ID.
ENDPOINT: GET /discounts/{discount_id}/
DISCOUNT TYPES:
Public: Publicly displays on Event Listing/Checkout (single event only)
Coded: Requires secret code
Access Code: Secret code for hidden tickets (optional discount amount)
Hold: Unlock discount for seats on hold
DISCOUNT FIELDS:
code (string): Discount name (public) or code (coded/access)
type (string): access, coded, public, hold
end_date (datetime): Usable until this date (relative to event timezone)
end_date_relative (integer): Seconds before event start
amount_off (decimal): Fixed amount 0.01-99999.99 (uses event currency)
percent_off (decimal): Percentage 1.00-100.00
quantity_available (integer): Usage limit (0 = unlimited)
quantity_sold (integer, readonly): Times used
start_date (local datetime): Usable from this date
start_date_relative (integer): Seconds before event start
ticket_class_ids (list): Ticket Class IDs (empty = all tickets)
event_id (string): Single Event ID (empty for cross-event)
ticket_group_id (string): Ticket Group ID
hold_ids (list): Hold IDs this unlocks
EXPANSIONS:
event: Single Event for discount
ticket_group: Ticket Group for discount
reserved_seating: Reserved seating settings
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: discount_id (required).
get_display_settingsA
Retrieve Display Settings for an Event.
ENDPOINT: GET /events/{event_id}/display_settings/
Display Settings control how Event appears on Event Listing page.
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: event_id (required).
get_eventA
Retrieve an Event by Event ID.
ENDPOINT: GET /events/{event_id}/
NOTE: If the Event being retrieved was created using the new version of Create, then you may notice that the Event's description field is now being used to hold the event summary. To retrieve your event's fully-rendered HTML description, you will need to make an additional API call to retrieve the Event's full HTML description.
EVENT OBJECT - PUBLIC FIELDS:
name (multipart-text): Event name
summary (string, optional): Event summary. Short summary describing the event and its purpose
description (multipart-text, optional, DEPRECATED): Event description. Description can be lengthy and have significant formatting
url (string): URL of the Event's Listing page on eventbrite.com
start (datetime-tz): Event start date and time
end (datetime-tz): Event end date and time
created (datetime): Event creation date and time
changed (datetime): Date and time of most recent changes to the Event
published (datetime): Event publication date and time
status (string): Event status. Can be draft, live, started, ended, completed, canceled
currency (string): Event ISO 4217 currency code
online_event (boolean): true = Specifies that the Event is online only (i.e. the Event does not have a Venue)
hide_start_date (boolean): If true, the event's start date should never be displayed to attendees
hide_end_date (boolean): If true, the event's end date should never be displayed to attendees
EVENT OBJECT - PRIVATE FIELDS (only available to User):
listed (boolean): true = Allows the Event to be publicly searchable on the Eventbrite website
shareable (boolean): true = Event is shareable, by including social sharing buttons for the Event to Eventbrite applications
invite_only (boolean): true = Only invitees who have received an email inviting them to the Event are able to see Eventbrite applications
show_remaining (boolean): true = Provides, to Eventbrite applications, the total number of remaining tickets for the Event
password (string): Event password used by visitors to access the details of the Event
capacity (integer): Maximum number of tickets for the Event that can be sold to Attendees. The total capacity is calculated by the sum of the quantity_total of the Ticket Class
capacity_is_custom (boolean): true = Use custom capacity value to specify the maximum number of Attendees for the Event. False = Calculate the maximum number of Attendees for the Event from the total of all Ticket Class capacities
AVAILABLE EXPANSIONS: Use ?expand=expansion_name to include additional data:
logo: Event image logo
venue: Event Venue
organizer: Event Organizer
format: Event Format
category: Event Category
subcategory: Event Subcategory
bookmark_info: Indicates whether a user has saved the Event as a bookmark
refund_policy: Event Refund Policy
ticket_availability: Overview of availability of all Ticket Classes
external_ticketing: External ticketing data for the Event
music_properties: Event Music Properties
publish_settings: Event publish settings
basic_inventory_info: Indicates whether the event has Ticket Classes, Inventory Tiers, Donation Ticket Classes, Ticket Rules, Inventory Add-Ons, and/or Admission Inventory Tiers
event_sales_status: Event's sales status details
checkout_settings: Event checkout and payment settings
listing_properties: Display/listing details about the event
has_digital_content: Whether or not an event Has Digital Content
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: eventId (required).
get_event_descriptionA
Retrieve full HTML description for an Event.
ENDPOINT: GET /events/{event_id}/description/
Returns fully rendered description as HTML string. Works with events created using New or Classic Create.
PERMISSIONS: event.details:read
ERRORS (400):
NOT_AUTHORIZED: No permission to view details
ARGUMENTS_ERROR: Invalid event ID
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: event_id (required).
get_event_seriesB
Retrieve parent Event Series by ID.
ENDPOINT: GET /series/{event_series_id}/
Event Series is repeating Event with multiple dates.
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: event_series_id (required).
get_formatA
Retrieve a Format by ID.
ENDPOINT: GET /formats/{format_id}/
Format represents event type (e.g., seminar, workshop, concert).
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: format_id (required).
get_inventory_tierA
Retrieve an Inventory Tier by ID for an Event.
ENDPOINT: GET /events/{event_id}/inventory_tiers/{inventory_tier_id}/
Inventory Tier controls capacity across multiple tickets. Supports GA holds.
ERRORS (403):
NOT_AUTHORIZED
ERRORS (404):
NOT_FOUND: Event or inventory_tier_id doesn't exist
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: event_id (required), inventory_tier_id (required).
get_mediaB
Retrieve Media by ID.
ENDPOINT: GET /media/{media_id}/
Media represents image for Event listing.
PARAMETERS:
width (optional): Thumbnail width
height (optional): Thumbnail height
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: media_id (required), width, height.
get_media_uploadA
Get Media Upload Information
Endpoint: GET /media/upload/
Returns information about a media upload, including upload status and processing state.
Authentication: Requires a valid Eventbrite API token with appropriate permissions.
Use Cases:
Check upload status after initiating a media upload
Verify media processing completion
Get media ID for use in events or organizers
Monitor upload progress
Response Fields:
id: Media upload ID
upload_token: Token for the upload
status: Upload status (pending, processing, complete, failed)
media_type: Type of media (image-event-logo, image-organizer-logo, etc)
url: URL of the uploaded media (when complete)
created: Upload creation timestamp
Error Codes:
400: Invalid upload token
401: Authentication required
404: Media upload not found
Inputs: upload_token (required).
get_orderA
Retrieve an Order by Order ID.
ENDPOINT: GET /orders/{order_id}/
The Order object represents an order made against Eventbrite for one or more Ticket Classes. A single Order can be made up of multiple tickets. Contains Order's financial and transactional information. Use Attendee object for attendee information.
Order objects are private - only available to User and Order owner.
ORDER FIELDS:
created (datetime): When Order was placed and Attendee created
changed (datetime): Last change to Attendee
name (string): Order owner name (use instead of first_name/last_name)
first_name (string): Order owner first name (deprecated, use name)
last_name (string): Order owner last name (deprecated, use name)
email (string): Order owner email
costs (object): Cost breakdown
event_id (string): Order's Event ID
time_remaining (number): Time to complete Order (seconds)
questions (array, optional): Custom questions for Order owner
answers (array, optional): Answers to custom questions
promo_code (string, optional): Discount code applied
status (string): Order status
ORDER COSTS BREAKDOWN:
base_price (currency): Amount without fees/tax (use display_price if include_fee used)
display_price (currency): Correct amount when include_fee used
display_fee (currency): Fees/tax included (absorbed) in displayed price
gross (currency): Total Order amount
eventbrite_fee (currency): Eventbrite fee (don't expose to Order owner)
payment_fee (currency): Payment processor fee
tax (currency): Tax amount
display_tax (object): Tax with name
price_before_discount (currency): Price before discount applied
discount_amount (currency): Total discount (if applied)
discount_type (string): coded, access, public, hold, or null
fee_components (list): Fee cost components
tax_components (list): Tax cost components
shipping_components (list): Shipping cost components
has_gts_tax (boolean): Has GTS tax
tax_name (string): Tax name if applicable
AVAILABLE EXPANSIONS:
event: Order's Event
attendees: Order's Attendees
merchandise: Merchandise in Order
concierge: Order's concierge
refund_requests: Order's refund request
survey: Order's custom questions
survey_responses: Responses to survey questions
answers: Answers to custom questions
ticket_buyer_settings: Purchaser information including confirmation messages
contact_list_preferences: Email opt-in preferences
POSSIBLE ERRORS (400):
ORDER_EXPIRED: The order is expired
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: order_id (required).
get_organizationA
Get an Organization by ID.
ENDPOINT: GET /organizations/{organization_id}/
Organization represents business structure where Events are created/managed.
ORGANIZATION FIELDS:
id (string): Organization ID
name (string): Organization name
image_id (string, optional): Image ID
vertical (string): Business type (default or music)
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: organization_id (required).
get_sales_reportA
Retrieve a sales Report by Event ID or status.
ENDPOINT: GET /reports/sales/
PARAMETERS:
event_ids (array[string], required): Event IDs
event_status (string): all, live, ended
start_date, end_date (string): Date range
filter_by (string): Filter by ticket_ids, currencies
group_by (string): payment_method, ticket, currency, event, country, etc.
period (number): Time period in date_facet units
date_facet (string): fifteen, hour, day, event_day, week, month, year, none
timezone (string): Timezone (default: first event timezone)
ERRORS (400):
ARGUMENTS_ERROR, CURRENCY_MISMATCH, INVALID, INVALID_PARAMETER
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: event_ids (required), end_date, timezone, start_date, +1 more.
get_structured_contentA
Retrieve latest published structured content for event.
ENDPOINT: GET /events/{id}/structured_content/
Returns latest published version. Must publish version first (publish=true in set).
PURPOSE:
listing (default): Basic event description
digital_content: Online Event Page for attendees
RESPONSE:
page_version_number: Current version
modules: List of modules (text, image, video)
widgets: List of widgets (agenda, faqs)
ERRORS (400):
NOT_AUTHORIZED: No permission to view
ARGUMENTS_ERROR: Invalid event ID
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: event_id (required), purpose.
get_subcategoryB
Retrieve a Subcategory by ID.
ENDPOINT: GET /subcategories/{subcategory_id}/
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: subcategory_id (required).
get_text_overridesC
Retrieve Text Overrides for Organization.
ENDPOINT: GET /organizations/{organization_id}/text_overrides/
Customize strings shown during ticket sales per event.
PARAMETERS:
locale: Locale (e.g., en_US)
venue_id: Venue ID filter
event_id: Event ID filter
text_codes: List of codes (tickets_not_yet_on_sale, tickets_sold_out, etc.)
ERRORS (400):
MISSING, INVALID
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: organization_id (required), locale, event_id, venue_id, +1 more.
get_ticket_buyer_settingsA
Retrieve Ticket Buyer Settings by Event.
ENDPOINT: GET /events/{event_id}/ticket_buyer_settings/
Settings for ticket buyers: confirmation message, instructions, refund requests, attendee updates, survey info.
ERRORS (400):
FIELD_INVALID
ERRORS (403):
NOT_AUTHORIZED
ERRORS (404):
NOT_FOUND
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: event_id (required).
get_ticket_classA
Retrieve a Ticket Class by Ticket Class ID.
ENDPOINT: GET /events/{event_id}/ticket_classes/{ticket_class_id}/
The Ticket Class object represents a possible ticket class (i.e. ticket type) for an Event. Multiple different types of tickets for an Event can be purchased in one transaction.
TICKET CLASS TYPES:
Free: No cost or currency. Event with only free tickets doesn't require payout info
Paid: Associated cost in Event's currency
Donation: Order owner enters amount to donate at checkout (no fixed cost)
TICKET CLASS OBJECT - PUBLIC FIELDS:
name (string): Ticket Class name
description (string, optional): Ticket Class description
sorting (integer): Order in purchase flow on event listing page
cost (currency): Display cost on Ticket Listing page (paid only)
fee (currency): Display fee on Ticket Listing page (paid only)
donation (boolean): true = Ticket Class is a Donation
free (boolean): true = Ticket Class is Free
minimum_quantity (integer): Minimum tickets per Order
maximum_quantity (integer): Maximum tickets per Order
has_pdf_ticket (boolean): true = Attendee receives PDF confirmation
delivery_methods (list): electronic, will_call, standard_shipping, third_party_shipping
on_sale_status (string): AVAILABLE or SOLD_OUT
image_id (string): Image ID for ticket class (used for add-ons)
TICKET CLASS OBJECT - PRIVATE FIELDS (Organization Members only):
capacity (integer): Number available for sale
quantity_sold (integer): Number previously sold (excludes real-time purchases)
hidden (boolean): true = Hidden from public
sales_start (datetime): When sales begin
sales_end (datetime): When sales end
sales_end_relative (object): Relative values for sales_end (series parent tickets only)
sales_start_after (string): Ticket Class ID that triggers sales start when it sells out
include_fee (boolean): true = Fee included in displayed price (cannot use with split_fee)
split_fee (boolean): true = Fee not included, actual_cost and actual_fee shown separately
hide_description (boolean): true = Description hidden on Ticket Listing page
hide_sale_dates (boolean): true = Sale dates hidden on event page
auto_hide (boolean): true = Hidden when not for sale
auto_hide_before (datetime): Override auto-hide disable time (default: sales_start)
auto_hide_after (datetime): Override auto-hide enable time (default: sales_end)
order_confirmation_message (string): Message shown when Order completed
secondary_assignment_enabled (boolean): true = Secondary barcode assignment enabled (e.g., RFID)
AVAILABLE EXPANSIONS: Use ?expand=expansion_name to include additional data:
event: Event for the Ticket Class
image: Image for the Ticket Class
POSSIBLE ERRORS (400):
AUTO_HIDE_NOT_SET: Must select an auto hide setting
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: event_id (required), ticket_class_id (required).
get_userB
Get authenticated user information.
ENDPOINT: GET /users/me/
Returns current user details.
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: no named parameters.
get_venueA
Retrieve a Venue by ID.
ENDPOINT: GET /venues/{venue_id}/
Venue represents location where Event takes place. Venues grouped by Organization.
VENUE FIELDS:
id (string): Venue ID
name (string): Venue name
address (address): Venue address
age_restriction (string): Age restriction
capacity (number): Maximum tickets that can be sold
latitude (string): Latitude coordinates
longitude (string): Longitude coordinates
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: venue_id (required).
list_attendeesA
List Attendees by Event ID. Returns a paginated response.
ENDPOINT: GET /events/{event_id}/attendees/
ATTENDEE OBJECT: The Attendee object represents the details of Attendee (ticket holder to an Event). The model is one Attendee per each sold ticket. If the Event is specified to only collect information on the Order owner (the default), all returned Attendees have the same information, apart from the barcodes and Ticket Class ID. Attendee objects are considered private; meaning that all Attendee information is only available to the User and Order owner.
ATTENDEE FIELDS RETURNED:
created (datetime): Attendee creation date and time (i.e. when order was placed)
changed (datetime): Date and time of last change to Attendee
ticket_class_id (string): Ticket Class used by Attendee when registering
variant_id (string): Variant of Ticket Class used by Attendee when registering
ticket_class_name (string): Name of Ticket Class used by Attendee when registering
quantity (integer): Always 1
costs (attendee_cost): Attendee ticket cost breakdown
profile (attendee-profile): Attendee basic profile information
addresses (attendee-addresses): Attendee address
questions (attendee-questions, optional): Custom questions for the Attendee
answers (attendee-answers, optional): Attendee's answers to custom questions
barcodes (attendee-barcodes): Attendee's entry bar code
team (attendee-team, optional): Attendee team information
affiliate (attendee-affiliate, optional): Attendee's affiliate code
checked_in (boolean): true = Attendee checked in
cancelled (boolean): true = Attendee cancelled
refunded (boolean): true = Attendee receives a refund
status (string): Attendee status
event_id (string): Event ID of the Attendee's Event
order_id (string): Order ID under which this Attendee's ticket was purchased
guestlist_id (string): Guest list ID under which the Attendee is listed. A null value means that this Attendee is not a guest
invited_by (string): Attendee who invited guest. A null value means that this Attendee is not a guest
delivery_method (string): Ticket delivery method used for the Attendee. Can be will_call, electronic, standard_shipping or third_party_shipping
PARAMETERS:
event_id (string, required): Event ID
status (enum, optional): Filter Attendees by status • attending: Attendee's status is either Attending or Checked In • not_attending: Attendee's status is Not Attending or Deleted • unpaid: Attendee's Order is not paid
changed_since (datetime, optional): Filter Attendees changed on or after the specified time
last_item_seen (number, optional): When passed in conjunction with changed_since, filter Attendees changed on or after the specified time and with an ID later than the value of the last_item_seen field
attendee_ids (array[string], optional): Filter Attendees with the specified IDs
AVAILABLE EXPANSIONS: Use ?expand=expansion_name to include additional data:
event: Attendee's Event
order: Attendee's Order
promotional_code: Promotional Code applied to Attendee's Order
assigned_number: Attendee bib number, if one exists for a race or endurance Event
answers: Attendee answers to custom questions
survey: Custom questions presented to the Attendee
survey_responses: Attendee's responses to survey questions
assigned_unit: Attendee's seating assignment details if Event has reserved seating
contact_list_preferences: Opt-in preferences for the email address associated with the Attendee
PAGINATION: Returns paginated response with continuation token support
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: eventId (required), status, pageSize, continuation.
list_categoriesA
List all categories.
ENDPOINT: GET /categories/
Returns paginated list of categories including subcategories nested.
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: no named parameters.
list_custom_questionsA
List custom Questions by Event.
ENDPOINT: GET /events/{event_id}/questions/
Returns paginated response with question array.
PARAMETERS:
as_owner (boolean): Return private events and fields
ERRORS (404):
NOT_FOUND: Event doesn't exist
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: event_id (required), as_owner.
list_default_questionsB
List default Questions by Event.
ENDPOINT: GET /events/{event_id}/canned_questions/
PARAMETERS:
include_all (boolean): Return whole list included or not
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: event_id (required), include_all.
list_discountsA
List Discounts by Organization.
ENDPOINT: GET /organizations/{organization_id}/discounts/
Returns paginated response.
FILTERS:
scope (required): event, multi_events, user
code_filter: Approximate match code/name
code: Exact match code/name
type: coded, access, public, hold
ticket_group_id: Ticket Group ID
event_id: Event ID (required for event scope)
order_by: code_asc, code_desc, discount_type_asc, discount_type_desc, start_asc, start_desc
hold_ids: Hold IDs (format: H123 or I123)
ERRORS (400):
CODE_AND_CODE_FILTER_PROVIDED: Only one of code or code_filter
INVALID_USAGE_FOR_EVENT_ID: Event ID cannot be used with multi_events scope
ORDER_BY_NOT_SUPPORTED: Must provide code or code_filter for sorting
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: scope (required), organization_id (required), code, type, +5 more.
list_eventsB
List Events by Organization ID. Returns a paginated response.
ENDPOINT: GET /organizations/{organization_id}/events/
PARAMETERS:
organization_id (string, required): Organization ID
name_filter (string, optional): Filter Organization's Events by specified name
currency_filter (string, optional): Filter Organization's Events by specified currency (e.g., USD)
order_by (enum, optional): Sort order for the list of Events • start_asc, start_desc, created_asc, created_desc, name_asc, name_desc
series_filter (array[enum], optional): Filter based on whether an event is not a series, a series, child series or parent series. This filter has higher precedence than show_series_parent filter. Default will use show_series_parent filter behavior. • allevents: non-series & child series & parent series. Equivalent to [children,parents,nonseries] or [allevents,nonseries] • children: only child series • parents: only parent series • nonseries: non-series events • allseries: only series events. Equivalent to [children,parents]
show_series_parent (boolean, optional): false (Default) = In the list, show the series children and not series parent. true = In the list, show the series parent instead of series children.
status (enum, optional): Filter Organization's Events by status. Specify multiple status values as a comma delimited string. • draft: A preliminary form of a possible future Event • live: The Event can accept registrations or purchases if ticket classes are available • started: The Event start date has passed • ended: The Event end date has passed • completed: The funds for your Event have been paid out • canceled: The Event has been canceled • all: List Events with any status
event_group_id (string, optional): Filter Organization's Events by event_group_id
collection_id (string, optional): Filter Organization's Events by collection_id
page_size (number, optional): Number of records to display on each page of the list (default: 50)
time_filter (string, optional): Limits the list results to either past or current and future Events • all, past, current_future
venue_filter (array, optional): Filter Organization's Events by Venue ID
organizer_filter (array, optional): Filter Organization's Events by Organizer ID
inventory_type_filter (array[enum], optional): Filter Organization's Events by Inventory Type • limited: limited quantity inventory/GA • reserved: Reserved inventory • externally_ticketed: Externally ticketed event (no inventory)
event_ids_to_exclude (array[string], optional): IDs of events to exclude from the Organization's Events list
event_ids (array[string], optional): IDs of events to include from the Organization's Events list
collection_ids_to_exclude (array[string], optional): IDs of collections to exclude from the Organization's Events list. This will have precedence over event_group_id filter and collection_id filter.
ERROR RESPONSES:
400 ARGUMENTS_ERROR: There are errors with your arguments
404 NOT_FOUND: The organization_id you requested does not exist
Inputs: status, orderBy, pageSize, continuation, +1 more.
list_events_by_seriesB
List Events by Event Series ID.
ENDPOINT: GET /series/{event_series_id}/events/
Returns paginated response.
PARAMETERS:
time_filter: all, past, current_future
order_by: start_asc, start_desc, created_asc, created_desc
start_date.range_start, start_date.range_end: Date range
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: event_series_id (required), order_by, time_filter.
list_fee_ratesA
List all available Pricing rates.
ENDPOINT: GET /pricing/fee_rates/
Returns paginated response.
PARAMETERS (all required):
country: ISO 3166 alpha-2 code
currency: ISO 4217 3-character code
plan: any, package1, package2
payment_type: any, eventbrite, authnet, moneris, paypal, google, manual, free, offline, cash, check, invoice
channel: any, atd, web
item_type: any, ticket, product
ERRORS (400):
INVALID_CURRENCY_COUNTRY_COMBINATION, ARGUMENTS_ERROR
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: country (required), currency (required), plan, channel, +2 more.
list_formatsB
List all available formats.
ENDPOINT: GET /formats/
Returns paginated response.
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: no named parameters.
list_inventory_tiersA
List Inventory Tiers for an Event.
ENDPOINT: GET /events/{event_id}/inventory_tiers/
FILTERS:
seatmap_number: Filter by tier group
count_against_event_capacity: Filter by whether tier counts toward capacity
ERRORS (403):
NOT_AUTHORIZED
ERRORS (404):
NOT_FOUND: Event doesn't exist
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: event_id (required), seatmap_number, count_against_event_capacity.
list_ordersA
List orders for an event or organization.
ENDPOINT: GET /events/{event_id}/orders/ OR GET /organizations/{organization_id}/orders/
Returns paginated list of orders. Orders are private - only available to authorized users.
FILTERING OPTIONS:
status: Filter by order status
active: Attending orders
inactive: Not attending orders
both: All orders
all_not_deleted: Active and inactive, but not deleted
changed_since (datetime): Only orders changed on/after this time (ISO 8601)
last_item_seen (string): With changed_since, orders after this time with ID > last_item_seen
only_emails (array): Only include orders from these email addresses
exclude_emails (array): Exclude orders from these email addresses
refund_request_statuses (array, event only): Filter by refund status
completed, pending, outside_policy, disputed, denied
ORDER FIELDS RETURNED:
created, changed: Timestamps
name, first_name, last_name, email: Order owner info
costs: Complete breakdown (base_price, display_price, eventbrite_fee, payment_fee, tax, gross, discount_amount, discount_type)
event_id: Event ID
time_remaining: Seconds to complete
status: Order status
promo_code (optional): Discount code
RESPONSE:
orders (array): List of Order objects
pagination: Pagination information
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: status, event_id, only_emails, changed_since, +4 more.
list_organization_membersB
List Members of an Organization.
ENDPOINT: GET /organizations/{organization_id}/members/
Returns paginated response.
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: organization_id (required).
list_organization_rolesA
List Roles by Organization.
ENDPOINT: GET /organizations/{organization_id}/roles/
Organization Role represents set of permissions owned by Organization.
Returns paginated response.
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: organization_id (required).
list_organizationsA
List organizations that the authenticated user is a member of.
ENDPOINT: GET /users/me/organizations/
An Organization represents a business structure (like a Marketing department) where Events are created and managed. Organizations are owned by one User and can have multiple Members.
Organizations group Members, Roles, Venues, and Assortments.
IMPORTANT: The organization_id returned by this endpoint must be obtained via API request. It is NOT the same as the organizer_id found in an Organizer Profile URL.
ORGANIZATION OBJECT FIELDS:
id (string): Organization ID (required for API calls like creating events, listing organization events)
name (string): Organization name
image_id (string, optional): ID of organization image
vertical (string): Business vertical type
default: Default business type
music: Music business type
USE CASES:
Get organization IDs needed for other API operations
Create events under an organization (requires organization_id)
List events for an organization
Manage organization members and roles
RESPONSE:
organizations (array): List of Organization objects
pagination: Pagination information
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: no named parameters.
list_seat_mapsA
List Seat Maps by Organization.
ENDPOINT: GET /organizations/{organization_id}/seatmaps/
PARAMETERS:
venue_id: Filter by venue
venue_name_filter: Filter by venue name substring
WARNING: Response not paginated yet, will be paginated soon.
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: organization_id (required), venue_id, venue_name_filter.
list_subcategoriesB
List all subcategories.
ENDPOINT: GET /subcategories/
Returns paginated response.
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: no named parameters.
list_ticket_classesA
List all ticket classes for an event.
ENDPOINT: GET /events/{event_id}/ticket_classes/
Returns paginated list of ticket classes with complete details including name, description, cost, fee, capacity, quantity_sold, sales dates, hidden status, and delivery methods.
TICKET CLASS TYPES:
Free: No cost, no payout info required
Paid: Has cost in event's currency
Donation: Buyer enters amount at checkout
RESPONSE INCLUDES:
ticket_classes (array): List of Ticket Class objects
pagination: Pagination information
TICKET CLASS FIELDS RETURNED: PUBLIC:
name, description, sorting, cost, fee
donation, free, minimum_quantity, maximum_quantity
has_pdf_ticket, delivery_methods, on_sale_status, image_id
PRIVATE (Organization Members):
capacity, quantity_sold, hidden
sales_start, sales_end, sales_end_relative, sales_start_after
include_fee, split_fee, hide_description, hide_sale_dates
auto_hide, auto_hide_before, auto_hide_after
order_confirmation_message, secondary_assignment_enabled
FILTERING:
pos (optional): Filter by point of sale
online: Online sales
at_the_door: At-the-door sales
lock_box: Lock box sales
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: event_id (required), pos.
list_venuesB
List Venues by Organization.
ENDPOINT: GET /organizations/{organization_id}/venues/
Returns paginated response.
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: organization_id (required).
list_webhooksA
List Webhooks by Organization ID.
ENDPOINT: GET /organizations/{organization_id}/webhooks/
Returns paginated response.
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: organization_id (required).
publish_eventA
Publish an Event.
ENDPOINT: POST /events/{event_id}/publish/
In order for publish to be permitted, the event must have all necessary information, including a name and description, an organizer, at least one ticket, and valid payment options. This API endpoint will return argument errors for event fields that fail to validate the publish requirements. Returns a boolean indicating success or failure of the publish.
If the event is a series parent, all occurrences in the series must be in a valid state to be published. Publishing the series parent will publish all series occurrences.
Deleted Events cannot be published.
REQUIREMENTS FOR PUBLISHING:
Event must have a name
Event must have a description or summary
Event must have an organizer
Event must have at least one ticket class
If event has paid tickets, must have valid payment options configured:
Payment country must be set
Payment type must be configured
If using PayPal, PayPal email must be specified
Split fees are not supported (deprecated)
SERIES PARENT EVENTS:
All occurrences must be in valid state
Publishing parent publishes all occurrences
Must have at least one date scheduled
RESPONSE: Returns object with:
published (boolean): true if successfully published
POSSIBLE ERRORS (400):
ALREADY_PUBLISHED_OR_DELETED: Event already published or deleted
NO_PAYMENT_OPTIONS: Event has paid tickets but no payment options configured
PAYMENT_OPTIONS_DEPRECATED_SPLIT_FEES: Split fees configured (no longer supported)
PAYMENT_OPTIONS_NO_COUNTRY: Paid tickets but no payment country configured
PAYMENT_OPTIONS_NO_PAYMENT_TYPE: Paid tickets but no payment type configured
PAYMENT_OPTIONS_PAYPAL_NO_EMAIL: PayPal configured but no email specified
PUBLISH_FREE_EVENT_FEATURE_DENIED: Reached limit of free events in Professional plan
ERROR_CANNOT_PUBLISH_SERIES_WITH_NO_DATES: Series must have at least one date scheduled
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: event_id (required).
set_structured_contentA
Set structured content for event (create/update).
ENDPOINT: POST /events/{id}/structured_content/{version}/
Structured content = modules (text, image, video) + widgets (agenda, faqs). Must send publish=true with modules to make visible to public.
MODULE TYPES:
text: Text content with HTML
image: Image with ID and URL
video: Video embed
WIDGET TYPES:
agenda: Event schedule with tabs/slots/hosts
faqs: FAQ list
PURPOSE:
listing (default): Event description
digital_content: Online Event Page
ERRORS (400):
NOT_AUTHORIZED: No permission
PAGE_VERSION_DISCONTINUITY: Version mismatch
MODULES_LIMIT_REACHED: Max 100 modules
PAGE_VERSION_LIMIT_REACHED: Max 5000 versions
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: modules (required), version (required), event_id (required), publish, +2 more.
unpublish_eventA
Unpublish an Event.
ENDPOINT: POST /events/{event_id}/unpublish/
Returns boolean indicating success or failure of unpublish action.
UNPUBLISH REQUIREMENTS:
Free Event (including past): Must not have pending or completed orders
Paid Event (completed/paid out): Can be unpublished
Paid Event (not completed): Can only unpublish if no pending or completed orders
SERIES PARENT EVENTS:
All occurrences must be in valid state to unpublish
Unpublishing parent unpublishes all occurrences
Series occurrence cannot be unpublished individually
RESPONSE:
unpublished (boolean): true if successfully unpublished
POSSIBLE ERRORS (400):
NOT_PUBLISHED: Event not currently published, cannot unpublish
CANNOT_UNPUBLISH: Cannot unpublish event with pending/completed sales (unless past/completed/paid out for paid tickets), or if series parent has occurrences in invalid state, or if trying to unpublish individual series occurrence
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: event_id (required).
update_capacity_tierA
Update capacity tier for an event.
ENDPOINT: POST /events/{event_id}/capacity_tier/
Supports partial updates. Can create/update/delete GA capacity hold inventory tiers.
ERRORS (400):
ARGUMENTS_ERROR, HAS_ATTENDEES, CAPACITY_TOTAL_TOO_SMALL, HOLD_QUANTITIES_EXCEEDS_REMAINING_CAPACITY
ERRORS (403):
NOT_AUTHORIZED
ERRORS (404):
NOT_FOUND
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: event_id (required), holds, capacity_total.
update_default_questionB
Update Default Question by ID.
ENDPOINT: POST /events/{event_id}/canned_questions/{question_id}/
ERRORS (400):
ARGUMENTS_ERROR
ERRORS (404):
NOT_FOUND: Event doesn't exist
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: event_id (required), question_id (required), question.
update_discountB
Update a Discount by ID.
ENDPOINT: POST /discounts/{discount_id}/
Same fields as create_discount.
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: discount_id (required), code, type, end_date, +6 more.
update_display_settingsB
Update Display Settings for an Event.
ENDPOINT: POST /events/{event_id}/display_settings/
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: event_id (required), display_settings.
update_eventA
Update an Event by Event ID.
ENDPOINT: POST /events/{event_id}/
Note that if the event is a series parent, updating name, description, hide_start_date, hide_end_date, currency, show_remaining, password, capacity, or source on the series parent will update these fields on all occurrences in the series.
EVENT OBJECT - PUBLIC FIELDS (can be updated):
name (multipart-text): Event name
summary (string, optional): Event summary. Short summary describing the event and its purpose
description (multipart-text, optional, DEPRECATED): Event description. Use summary instead
start (datetime-tz): Event start date and time
end (datetime-tz): Event end date and time
currency (string): Event ISO 4217 currency code
online_event (boolean): true = Event is online only (no Venue)
hide_start_date (boolean): If true, event's start date never displayed to attendees
hide_end_date (boolean): If true, event's end date never displayed to attendees
EVENT OBJECT - PRIVATE FIELDS (can be updated):
listed (boolean): true = Event publicly searchable on Eventbrite
shareable (boolean): true = Event is shareable with social buttons
invite_only (boolean): true = Only invitees can see the event
show_remaining (boolean): true = Show remaining ticket count
password (string): Password to access event details
capacity (integer): Maximum attendees (sum of ticket class quantities)
capacity_is_custom (boolean): true = Use custom capacity, false = Calculate from ticket classes
organizer_id (string): ID of event organizer
venue_id (string): ID of event venue
format_id (string): ID of event format
category_id (string): ID of event category
subcategory_id (string): ID of event subcategory
logo_id (string): ID of event logo image
is_reserved_seating (boolean): Whether event has reserved seating
is_series (boolean): Whether this is a series parent event
show_pick_a_seat (boolean): For reserved seating, show seat picker
show_seatmap_thumbnail (boolean): Show seat map thumbnail
show_colors_in_seatmap_thumbnail (boolean): Show colors in seat map thumbnail
POSSIBLE ERRORS (400):
CANNOT_UPDATE_CURRENCY: Cannot update event with paid sales or reserved seats
CANNOT_UPDATE_SOURCE: Event source can only be set during creation
DATE_CONFLICT: End date must be after start date
DIFFERENT_TIMEZONES: Start and end times must have same timezone
INVALID_DATE: Start and end dates cannot be in the past
INVENTORY_TYPE_CONFLICT: Only single inventory type may be set at once
INVITE_CONFLICT: Cannot set both listed and invite_only
NO_DEFAULT_ORGANIZER: No organizer ID and no default found
NO_PAYMENT_OPTIONS: Event has paid tickets but no payment options
NO_PACKAGE_SELECTED: Need to select package at /organizations/{id}/assortment/
NO_VENUE: Attempted to create event without venue
PASSWORD_CONFLICT: Cannot set both listed and password
PAYMENT_OPTIONS_DEPRECATED_SPLIT_FEES: Split fees no longer supported
PAYMENT_OPTIONS_NO_COUNTRY: Paid tickets but no payment country
PAYMENT_OPTIONS_NO_PAYMENT_TYPE: Paid tickets but no payment type
PAYMENT_OPTIONS_PAYPAL_NO_EMAIL: PayPal configured but no email
SHARE_INVITE_CONFLICT: Cannot set both shareable and invite_only
UNSUPPORTED_TIMEZONE: Timezone does not exist
VENUE_AND_ONLINE: Cannot set both venue_id and online_event
SUMMARY_DESCRIPTION_CONFLICT: Cannot set both summary and description
OCCURRENCE_TIMEZONE_UPDATE_NOT_ALLOWED: Cannot change timezone on series occurrence
SERIES_PARENT_START_END_DATE_EDIT: Cannot set start/end on series parent
OCCURRENCE_DURATION_TOO_LONG: Series occurrences cannot exceed 7 days
IS_RESERVED_SEATING_UPDATE_NOT_ALLOWED_ON_SERIES_EVENTS: Reserved seating events cannot be recurring
IS_SERIES_UPDATE_NOT_ALLOWED_ON_RESERVED_EVENTS: Reserved seating events cannot be recurring
IS_SERIES_UPDATE_NOT_ALLOWED_ON_TICKETED_EVENTS: Delete all tickets to make this change
IS_SERIES_UPDATE_NOT_ALLOWED_ON_PUBLISHED_EVENTS: Unpublish event to make this change
IS_SERIES_UPDATE_NOT_ALLOWED_HAS_OCCURRENCES: Delete all occurrences to change to one-time event
IS_SERIES_UPDATE_NOT_ALLOWED_ON_SERIES_OCCURRENCE: Cannot change occurrence to one-time event
ARGUMENTS_ERROR: Errors with your arguments
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: event_id (required), end, name, start, +25 more.
update_inventory_tierB
Update an Inventory Tier by ID.
ENDPOINT: POST /events/{event_id}/inventory_tiers/{inventory_tier_id}/
Supports partial updates.
ERRORS (400):
ARGUMENTS_ERROR
HOLD_QUANTITIES_EXCEEDS_CAPACITY_TOTAL: Sum of hold quantities must be less than capacity_total
ERRORS (403):
NOT_AUTHORIZED
ERRORS (404):
NOT_FOUND: Event or inventory_tier_id doesn't exist
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: event_id (required), inventory_tier_id (required), name, capacity_total, +1 more.
update_multiple_inventory_tiersA
Update Multiple Inventory Tiers (Bulk)
Endpoint: POST /events/{event_id}/inventory_tiers/
Updates multiple inventory tiers in a single request for efficient bulk operations.
Authentication: Requires a valid Eventbrite API token with event management permissions.
Use Cases:
Bulk update tier quantities or prices
Synchronize tier configurations across multiple tiers
Efficiently modify complex inventory structures
Reduce API calls when updating many tiers
Updatable Fields:
name: Tier name
quantity: Number of tickets in this tier
price: Price for this tier
sales_start: When sales begin for this tier
sales_end: When sales end for this tier
minimum_quantity: Minimum tickets per order
maximum_quantity: Maximum tickets per order
Important Notes:
Each tier object must include its ID
Only provided fields will be updated (partial updates supported)
All tiers must belong to the specified event
Error Codes:
400: Invalid tier data or tier IDs
401: Authentication required
403: Insufficient permissions
404: Event or tier not found
Inputs: event_id (required), inventory_tiers (required).
update_ticket_buyer_settingsB
Update Ticket Buyer Settings for an Event.
ENDPOINT: POST /events/{event_id}/ticket_buyer_settings/
ERRORS (400):
FIELD_INVALID
ERRORS (403):
NOT_AUTHORIZED
ERRORS (404):
NOT_FOUND
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: event_id (required), ticket_buyer_settings.
update_ticket_classA
Update an existing Ticket Class for an event.
ENDPOINT: POST /events/{event_id}/ticket_classes/{ticket_class_id}/
Supports partial updates. After May 7, 2020, inventory_tier_id is required for tiered events.
TICKET CLASS OBJECT - PUBLIC FIELDS (can be updated):
name (string): Ticket Class name
description (string): Ticket Class description
sorting (integer): Order in purchase flow
cost (currency): Display cost (format: "CURRENCY,amount_in_cents" e.g., "USD,1000" for $10.00)
donation (boolean): Is donation ticket
free (boolean): Is free ticket
minimum_quantity (integer): Minimum tickets per Order
maximum_quantity (integer): Maximum tickets per Order
delivery_methods (array): electronic, will_call, standard_shipping, third_party_shipping
image_id (string): Image ID for ticket class
TICKET CLASS OBJECT - PRIVATE FIELDS (can be updated):
quantity_total (integer): Total number available
capacity (integer): Number available for sale
hidden (boolean): Hidden from public
sales_start (string): When sales begin (ISO 8601 datetime)
sales_end (string): When sales end (ISO 8601 datetime)
sales_start_after (string): Ticket Class ID that triggers sales start
include_fee (boolean): Fee included in price (cannot use with split_fee)
split_fee (boolean): Fee shown separately
hide_description (boolean): Hide description on listing page
hide_sale_dates (boolean): Hide sale dates on event page
auto_hide (boolean): Hide when not for sale
auto_hide_before (datetime): Override auto-hide disable time
auto_hide_after (datetime): Override auto-hide enable time
inventory_tier_id (string): Inventory tier ID (required for tiered events)
order_confirmation_message (string): Message when Order completed
secondary_assignment_enabled (boolean): Secondary barcode assignment (RFID)
POSSIBLE ERRORS (400):
AUTO_HIDE_NOT_SET: Must select auto hide setting
BAD_QUANTITIES: Sum of tickets doesn't equal total available
COST_GREATER_THAN_FEE: Cost must be greater than fee
CURRENCY_MISMATCH: Event and ticket currency must match
DONATION_AND_COST: Cannot be both donation and charged ticket
DONATION_AND_FREE: Cannot be both donation and free ticket
DONATION_AND_MIN_QUANTITY: Set minimum quantity for donation ticket
FREE_AND_COST: Cannot be both free and charged ticket
INSUFFICIENT_PACKAGE: Need to upgrade package
INVALID_DELIVERY_METHOD: Delivery method not allowed for this organization
INVALID_EVENT: Event not qualified to have tickets
INVALID_EVENT_ID: Event ID must match ticket's event
INVALID_INVENTORY_TIER_ID: Cannot change inventory tier of ticket
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: event_id (required), ticket_class_id (required), cost, free, +20 more.
update_venueB
Update a Venue by ID.
ENDPOINT: POST /venues/{venue_id}/
VENUE FIELDS (all optional for update):
name (string): Venue name
address (object): Address
age_restriction (string): Age restriction
capacity (number): Max capacity
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: venue_id (required), name, address, capacity, +1 more.
upload_mediaB
Upload a Media image file.
ENDPOINT: POST /media/upload/
ERRORS (400):
BAD_FILE: File not valid
BAD_FORMAT: File format not supported
BAD_UPLOAD_TOKEN: Upload token invalid
S3_ERROR: Error uploading to S3, try again
AUTHENTICATION: Requires: Authorization: Bearer PERSONAL_OAUTH_TOKEN
Inputs: file_name, file_type, upload_token.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 81 tools
Many tools target distinct resources and actions, but notable overlaps exist: get_user and get_current_user both hit /users/me/, and create_inventory_tier vs create_multiple_inventory_tiers (bulk) can be confused. With 81 tools, the cognitive load makes selection error-prone, though detailed descriptions help mitigate ambiguity.
All tool names follow a consistent snake_case verb_noun pattern (e.g., list_events, create_event, update_ticket_class). Minor variations like 'get_current_user' vs 'get_user' do not break the pattern. No mixed conventions are present.
81 tools is an extreme mismatch for an MCP server; even a large API like Eventbrite can be exposed with fewer, higher-level tools. The count far exceeds the recommended 3-15 range, causing significant selection burden for an agent.
The surface covers most Eventbrite domains: events, orders, attendees, tickets, discounts, venues, webhooks, media, inventory tiers, seat maps, custom questions, text overrides, pricing, reports, and structured content. However, some areas like organizer management, refunds, and user-specific event lists are missing, so minor gaps remain.
Maintenance
Related MCP Connectors
Eventbrite MCP.
Eventify MCP server — manage events, attendees, sessions, speakers, sponsors, and analytics.
A MCP server that works with Google Calendar to manage event listing, reading, and updates.
MCP server for Meitre restaurant reservations.
Related MCP Servers
- AlicenseBqualityDmaintenanceAn MCP server that provides tools for querying the Edinburgh Festivals API to retrieve information about events and venues across all Edinburgh festivals, including historical data.31MIT
- AlicenseAqualityDmaintenanceThis is a Model Context Protocol (MCP) server that provides tools for interacting with the Eventbrite API. It allows AI assistants to search for events, get event details, retrieve venue information, and more.418 npmMIT
- FlicenseAqualityDmaintenanceAn MCP server for the Luma Events API that enables creating, updating, and managing events and guests.96-
- AlicenseNot gradedqualityDmaintenanceMCP server for eventos event management platform, enabling AI assistants to manage events and tickets via API integration. Supports authentication, ticket CRUD operations, and listing with pagination.1MIT