Creators & communities
Substack
Posts, Notes, messages, subscribers and stats for your publication.
50 endpoints
Your agent opens your Eventbrite account, reads events, orders and attendees, and checks people in. It emails attendees, refunds orders and adds promo codes, all after your OK where money or mail is involved.
13 tools Read and write
Eventbrite has a public REST API (v3) for events, orders, attendees, discounts and reports, and no official MCP server (checked 6 Nov 2026). Cotlet runs 13 Eventbrite tools in your signed-in account. There is no API key to create and nothing to develop. It works inside the ChatGPT and Claude apps, runs around the clock in our hosting, and one Cotlet account covers many apps.
| What you need | Eventbrite API | Cotlet |
|---|---|---|
| List events, orders and attendees | Yes | Yes |
| Sales and attendee reports | Yes | Yes, sales audit report |
| Refund an order | Documented as a full refund | Full or part, after your OK |
| Create promo codes | Yes | Yes, after your OK |
| Copy and publish an event | Yes | Yes, after your OK |
| Check in attendees | No endpoint | Yes |
| Email attendees | No endpoint | Yes, after your OK |
| Search public events | Shut down in 2019 | Yes |
| Official MCP server | None | Hosted, ready |
| Works in the ChatGPT and Claude apps | You build the connection | Paste one address |
| Getting started | API token, code | Sign up, sign in once |
Checked 6 Nov 2026. Sources: Eventbrite Platform: API reference · Eventbrite Help: Generate an API key · Zapier: Eventbrite integrations · Zapier MCP for Eventbrite
Use your own account in its Cotlet Cloud Browser.
Paste one address into Claude or ChatGPT.
Your agent reads, emails and refunds for you.
We never keep your Eventbrite password, and no email or refund goes out until you approve it. Who can see your session
Three steps. Chat apps sign in with OAuth. Editors, n8n and scripts use an API key.
Enable Eventbrite for agents. Sign up, log in to Eventbrite in its Cloud Browser, then press Enable for agents.
Add the Cotlet address. Add https://cotlet.dev/mcp/v1 as an MCP server or connector in your agent.
Approve the connection. Chat apps ask you to sign in to Cotlet. Editors, n8n and scripts use an API key from the console.
One shared address, https://cotlet.dev/mcp/v1, also carries Eventbrite next to your other apps. If you enable Eventbrite after connecting, refresh the connector so the new tools show up.
Settings > Connectors > Add custom connector
URL: https://cotlet.dev/mcp/v1/connect
Claude Code:
claude mcp add --transport http cotlet-eventbrite \
https://cotlet.dev/mcp/v1 \
--header "Authorization: Bearer $COTLET_API_KEY" Settings > Apps & Connectors > Create
MCP server URL: https://cotlet.dev/mcp/v1/connect
Authentication: OAuth // ~/.cursor/mcp.json
{
"mcpServers": {
"cotlet-eventbrite": {
"url": "https://cotlet.dev/mcp/v1",
"headers": { "Authorization": "Bearer ${env:COTLET_API_KEY}" }
}
}
} # ~/.codex/config.toml
[mcp_servers.cotlet-eventbrite]
url = "https://cotlet.dev/mcp/v1"
bearer_token_env_var = "COTLET_API_KEY" MCP Client Tool (inside an AI Agent)
Transport: HTTP Streamable
URL: https://cotlet.dev/mcp/v1
Auth: Bearer, <your key> Make: MCP Client > Call a tool
Zapier: MCP Client by Zapier > Run Tool
Server URL: https://cotlet.dev/mcp/v1
Token: <your key> A copied event is a draft until you publish it. Waitlist settings, tracking links and attendee details are not copied.
Lists the events of your organization as the Events page shows them. Each row carries the event_id the other tools take, the date, the status and the number of tickets sold. Use query to find an event by words from its title.
MCP calleventbrite_read → list_events
REST endpointGET https://cotlet.dev/api/v1/eventbrite/events
| Name | Type | Description |
|---|---|---|
| status string | string | Filter by the status the Events page shows, for example live or draft. |
| query string | string | Words from the event title. |
| cursor string | string | Next page cursor from the previous call. |
{
"events": [
{
"event_id": "812340551",
"name": "Saturday trail run",
"starts_at": "2026-11-14T08:00:00-08:00",
"status": "live",
"tickets_sold": 120
},
{
"event_id": "812340987",
"name": "Beginner night swim",
"starts_at": "2026-11-19T19:00:00-08:00",
"status": "live",
"tickets_sold": 41
}
],
"next_cursor": null
} Returns the event as its dashboard shows it: title, summary, start and end, venue, status and each ticket type with its price and the number sold. It changes nothing.
MCP calleventbrite_read → get_event
REST endpointGET https://cotlet.dev/api/v1/eventbrite/events/{event_id}
| Name | Type | Description |
|---|---|---|
| event_id string required | string | Event ID from list_events. |
{
"event_id": "event_8c41d2"
} {
"event_id": "812340551",
"name": "Saturday trail run",
"status": "live",
"starts_at": "2026-11-14T08:00:00-08:00",
"ends_at": "2026-11-14T11:00:00-08:00",
"venue": "Pine Ridge trailhead",
"ticket_types": [
{
"name": "General admission",
"price": "25.00 USD",
"sold": 120
},
{
"name": "Volunteer",
"price": "0.00 USD",
"sold": 8
}
]
} Runs More, Copy event: a new event with the details of the old one, and the new title, summary and date and time you give. The copy is not published. It uses the payout method of the original event. Waitlist settings, tracking links, emails to attendees, online event pages and attendee details are not copied. By default you confirm each call; you can switch that off for this tool.
MCP calleventbrite_write → copy_event
REST endpointPOST https://cotlet.dev/api/v1/eventbrite/events/{event_id}/copy
| Name | Type | Description |
|---|---|---|
| event_id string required | string | Event ID from list_events. |
| title string required | string | Title of the new event. |
| summary string | string | Summary of the new event. Leave out to keep the old one. |
| starts_at string required | string | ISO date and time the new event starts. |
| ends_at string required | string | ISO date and time the new event ends. |
{
"event_id": "event_8c41d2",
"title": "title",
"starts_at": "starts at",
"ends_at": "ends at"
} {
"new_event_id": "812341200",
"copied_from": "812340551",
"name": "Saturday trail run, December",
"status": "draft"
} Publishes the event, now or scheduled, like the Publish button. A published event is visible to the public and can sell tickets. Review the payout method, ticket settings, order form and refund policy first; get_event shows the ticket types. By default you confirm each call; you can switch that off for this tool.
MCP calleventbrite_write → publish_event
REST endpointPOST https://cotlet.dev/api/v1/eventbrite/events/{event_id}/publish
| Name | Type | Description |
|---|---|---|
| event_id string required | string | Event ID from list_events. |
| publish_at string | string | ISO date and time to publish later. Leave out to publish now. |
{
"event_id": "event_8c41d2"
} {
"event_id": "812341200",
"status": "live",
"url": "https://www.eventbrite.com/e/saturday-trail-run-december-tickets-812341200"
} Free orders cannot be refunded; cancel or delete them in Eventbrite. Read the order first to see which tickets can still be refunded.
Lists orders from Manage orders, for one event or across all events. Each row has the order_id, the buyer name and email, the total and the order status. Use query to search by buyer name or email. order_type switches between completed orders and refunded or cancelled ones.
MCP calleventbrite_read → list_orders
REST endpointGET https://cotlet.dev/api/v1/eventbrite/orders
| Name | Type | Description |
|---|---|---|
| event_id string | string | Limit to one event. Leave out for all events. |
| query string | string | Buyer name or email. |
| order_type string | string | completed for all completed orders, refunded_cancelled for refunded and cancelled orders. Default completed. |
| cursor string | string | Next page cursor from the previous call. |
{
"orders": [
{
"order_id": "9921043387",
"event_id": "812340551",
"buyer": "Jordan Ellis",
"email": "jordan@example.com",
"total": "50.00 USD",
"status": "completed"
},
{
"order_id": "9921043412",
"event_id": "812340551",
"buyer": "Priya Nair",
"email": "priya@example.com",
"total": "25.00 USD",
"status": "completed"
}
],
"next_cursor": null
} Returns the order as Manage orders shows it: buyer, each ticket with its type and price, the total and any amount already refunded. Read it before refund_order to see which tickets can still be refunded.
MCP calleventbrite_read → get_order
REST endpointGET https://cotlet.dev/api/v1/eventbrite/orders/{order_id}
| Name | Type | Description |
|---|---|---|
| order_id string required | string | Order ID from list_orders. |
{
"order_id": "order_8c41d2"
} {
"order_id": "9921043387",
"event_id": "812340551",
"buyer": "Jordan Ellis",
"email": "jordan@example.com",
"tickets": [
{
"attendee_id": "5531002001",
"type": "General admission",
"price": "25.00 USD"
},
{
"attendee_id": "5531002002",
"type": "General admission",
"price": "25.00 USD"
}
],
"total": "50.00 USD",
"refunded": "0.00 USD",
"status": "completed"
} Runs Refund this order from Manage orders: you choose the tickets and the amount, and Eventbrite emails the buyer a refund confirmation. The money goes back to the original payment method within 5 to 7 business days. Free orders cannot be refunded; cancel or delete them in Eventbrite. If Eventbrite asks for a card to cover the refund, the call stops with that message and you finish it in Eventbrite. By default you confirm each call; you can switch that off for this tool.
MCP calleventbrite_write → refund_order
REST endpointPOST https://cotlet.dev/api/v1/eventbrite/orders/{order_id}/refund
| Name | Type | Description |
|---|---|---|
| order_id string required | string | Order ID from list_orders. |
| attendee_ids array | array | Tickets to refund, from get_order. Leave out to refund the whole order. |
| amount string | string | Amount to refund, for example 25.00. Leave out for the full price of the chosen tickets. |
{
"order_id": "order_8c41d2"
} {
"order_id": "9921043387",
"status": "refunded",
"refunded": "50.00 USD",
"buyer_notified": true
} "All attendees" reaches only people registered at the moment of sending. Your Eventbrite role needs the permission to email attendees.
Lists the attendees from the event dashboard under Manage attendees. Each row has the attendee_id, the order_id, the name and email on the order, the ticket type and whether the attendee is checked in. Filter by ticket type or check-in status, or search by the name or email on the order.
MCP calleventbrite_read → list_attendees
REST endpointGET https://cotlet.dev/api/v1/eventbrite/events/{event_id}/attendees
| Name | Type | Description |
|---|---|---|
| event_id string required | string | Event ID from list_events. |
| ticket_type string | string | Ticket type name as shown in get_event. |
| checked_in boolean | boolean | true for checked-in attendees, false for the rest. Leave out for all. |
| query string | string | Name or email on the order. |
| cursor string | string | Next page cursor from the previous call. |
{
"event_id": "event_8c41d2"
} {
"attendees": [
{
"attendee_id": "5531002001",
"order_id": "9921043387",
"name": "Jordan Ellis",
"email": "jordan@example.com",
"ticket_type": "General admission",
"checked_in": false
},
{
"attendee_id": "5531002003",
"order_id": "9921043412",
"name": "Priya Nair",
"email": "priya@example.com",
"ticket_type": "General admission",
"checked_in": true
}
],
"next_cursor": null
} Does what the Check-in page does: ticks the attendees you name as checked in, or checks them out when checked_in is false. Several attendees go in one call. A check-in reaches no one and is undone with the same call set to false, so it does not wait for your OK.
MCP calleventbrite_write → check_in_attendee
REST endpointPOST https://cotlet.dev/api/v1/eventbrite/events/{event_id}/attendee/check
| Name | Type | Description |
|---|---|---|
| event_id string required | string | Event ID from list_events. |
| attendee_ids array required | array | Attendee IDs from list_attendees. |
| checked_in boolean | boolean | true to check in, false to check out. Default true. |
{
"event_id": "event_8c41d2",
"attendee_ids": "attendee ids"
} {
"event_id": "812340551",
"updated": [
{
"attendee_id": "5531002001",
"checked_in": true
}
]
} Creates an email under Emails to attendees. send_to picks all attendees, attendees who registered after a date, specific attendees or one ticket type. "All attendees" reaches only people registered at the moment it is sent; attendees who have not registered yet or whose orders were cancelled get nothing. Leave send_at out to send now. send_test sends one test email and nothing else. For a recurring event you can only send now or at one date and time. If your login lacks the permission to email attendees, the call fails and says the account owner must grant it. By default you confirm each call; you can switch that off for this tool.
MCP calleventbrite_write → email_attendees
REST endpointPOST https://cotlet.dev/api/v1/eventbrite/events/{event_id}/attendees/email
| Name | Type | Description |
|---|---|---|
| event_id string required | string | Event ID from list_events. |
| subject string required | string | Email subject. |
| body string required | string | Email text. |
| send_to string required | string | all, registered_after, specific_attendees or ticket_type. |
| registered_after string | string | ISO date. Needed when send_to is registered_after. |
| attendee_ids array | array | Attendee IDs from list_attendees. Needed when send_to is specific_attendees. |
| ticket_type string | string | Ticket type name. Needed when send_to is ticket_type. |
| reply_to string | string | Address that gets the replies. |
| send_at string | string | ISO date and time to send later. Leave out to send now. |
| send_test boolean | boolean | true to send only a test email to your own address. |
{
"event_id": "event_8c41d2",
"subject": "subject",
"body": "body",
"send_to": "send to"
} {
"event_id": "812340551",
"status": "sent",
"send_to": "all",
"recipients": 128
} The audit report needs permission to view Advanced reports. Public search reads what a visitor sees and returns nothing about orders.
Reads the Audit report under Sales in Event reports: the total tickets sold at face value, which Eventbrite calls net sales, split by ticket type. Your Eventbrite role needs permission to view Advanced reports, otherwise the call fails and says so. It changes nothing.
MCP calleventbrite_read → get_sales_audit_report
REST endpointGET https://cotlet.dev/api/v1/eventbrite/events/{event_id}/sales-audit-report
| Name | Type | Description |
|---|---|---|
| event_id string required | string | Event ID from list_events. |
{
"event_id": "event_8c41d2"
} {
"event_id": "812340551",
"rows": [
{
"ticket_type": "General admission",
"tickets_sold": 120,
"net_sales": "3000.00 USD"
},
{
"ticket_type": "Volunteer",
"tickets_sold": 8,
"net_sales": "0.00 USD"
}
],
"total": {
"tickets_sold": 128,
"net_sales": "3000.00 USD"
}
} Adds a code under Promotions in the event's Tickets, with the settings the form has: code name, ticket limit, a set amount or a percentage off, start and end dates, and which tickets it applies to. reveal_hidden_tickets makes the code an access code for tickets that are hidden. By default the code is available as long as the tickets it applies to are available. A live code gives buyers a price cut, so it counts as money. By default you confirm each call; you can switch that off for this tool.
MCP calleventbrite_write → create_promo_code
REST endpointPOST https://cotlet.dev/api/v1/eventbrite/events/{event_id}/promo-codes
| Name | Type | Description |
|---|---|---|
| event_id string required | string | Event ID from list_events. |
| code string required | string | The code buyers enter at checkout. |
| percent_off number | number | Percentage taken off. Use this or amount_off. |
| amount_off string | string | Fixed amount taken off, for example 5.00. Use this or percent_off. |
| ticket_limit integer | integer | How many tickets the code can be applied to. |
| starts_at string | string | ISO date and time the code starts. |
| ends_at string | string | ISO date and time the code ends. |
| ticket_types array | array | Ticket type names the code applies to. Leave out for all applicable tickets. |
| reveal_hidden_tickets boolean | boolean | true to reveal hidden tickets at checkout. Default false. |
{
"event_id": "812340551",
"code": "RUNCLUB15",
"percent_off": 15,
"ticket_limit": 40,
"ends_at": "2026-11-13T23:59:00-08:00"
} {
"event_id": "812340551",
"code": "RUNCLUB15",
"percent_off": 15,
"ticket_limit": 40,
"applies_to": "all applicable tickets",
"status": "active"
} Reads the public search results a visitor sees on eventbrite.com: name, date, venue, organizer, price label and link. It needs no events of your own. It returns nothing about orders or attendees. Eventbrite shut down its own search API on 12 Dec 2019, so this is the way to search from an agent.
MCP calleventbrite_read → search_public_events
REST endpointGET https://cotlet.dev/api/v1/eventbrite/public-events/search
| Name | Type | Description |
|---|---|---|
| query string required | string | What to search for, for example trail running. |
| location string | string | City or area. Leave out for the place Eventbrite picks for your login. |
| cursor string | string | Next page cursor from the previous call. |
{
"query": "query"
} {
"events": [
{
"event_id": "700114820",
"name": "Sunrise 10K trail race",
"starts_at": "2026-11-21T07:30:00-08:00",
"venue": "Cedar Park",
"organizer": "Valley Runners",
"price": "From 30.00 USD",
"url": "https://www.eventbrite.com/e/sunrise-10k-trail-race-tickets-700114820"
}
],
"next_cursor": null
} Your logged-in Eventbrite profile, encrypted with AES-256-GCM, in Finland. Not the password.
The 13 Eventbrite tools. Never the cookie.
What your role sees: events, orders, attendee names and emails, reports.
Payout settings, plan, password, two-factor and deleting events.
Your agent gets a link to sign in again. You type the login, we never do.
Disable for agents, reset the browser, or sign out in Eventbrite's account settings.
Our site scores A+ on Qualys SSL Labs, securityheaders.com and Mozilla Observatory (live results). There is no SOC 2 report or third-party pentest yet.
When Eventbrite moves a button or renames a field, the fix happens on our side and your prompts keep working. status.cotlet.dev watches the site, console and API every 3 minutes.
| Action | Undo |
|---|---|
| Check in attendees | Run it again with checked_in set to false |
| Email attendees | No, a sent email is out. Send the test to yourself first |
| Refund an order | No, the money goes back to the buyer in 5 to 7 business days |
| Create a promo code | Delete it under Promotions while unused. A used code ends when you change its end date or limit |
| Copy an event | Delete the draft under Events, Drafts |
| Publish an event | Unpublish it in the event dashboard; it returns to draft. Completed orders must be refunded or cancelled first |
5 of 13 tools ask first: email_attendees, refund_order, create_promo_code, copy_event, publish_event. A check-in reaches no one and undoes itself with one call, so it runs at once. Switch the wait off per tool for a scheduled run.
Eventbrite emails the buyer a confirmation for every refund. Free orders cannot be refunded; cancel or delete them in Eventbrite.
{
"name": "create_promo_code",
"arguments": {
"event_id": "812340551",
"code": "RUNCLUB15",
"percent_off": 15,
"ticket_limit": 40,
"ends_at": "2026-11-13T23:59:00-08:00"
}
} curl -X POST https://cotlet.dev/api/v1/eventbrite/events/812340551/promo-codes \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"code":"RUNCLUB15","percent_off":15,"ticket_limit":40,"ends_at":"2026-11-13T23:59:00-08:00"}' {
"event_id": "812340551",
"code": "RUNCLUB15",
"percent_off": 15,
"ticket_limit": 40,
"applies_to": "all applicable tickets",
"status": "active"
} Scripts and cron jobs reach the same tools over REST, with the same key and price. If your Eventbrite role lacks a permission, such as emailing attendees, the call returns Eventbrite's message, and a failed call costs nothing.
About $12 a monthfor an organizer with 4 events a month, 2,110 credits. Eventbrite's own fees are billed by Eventbrite as before.
| Job | Calls | Credits |
|---|---|---|
| Weekly sales report for live events | 4 × 4 | 160 |
| Reminder email with a test first | 5 × 4 | 200 |
| Check in late arrivals at the door | 2 × 4 | 80 |
| Find an order and refund it | 3 × 3 | 90 |
| Promo code for a launch | 2 × 2 | 40 |
| Copy last event and publish it | 4 × 1 | 40 |
| Cloud Browser, 30 days | 1,500 | |
| Total | 2,110 |
The month is our example: 4 events, a weekly sales report, a reminder email with a test for each event, 3 refunds and 2 promo codes. Eventbrite's 2025 filing counts about 4.6 million events and 258 million tickets, about 56 tickets an event, free and paid together. Dollars at the $29 pack rate.
| Credits | Price, one time | Calls at 10 credits | Per 1,000 credits |
|---|---|---|---|
| 5,000 | $29 | 500 | $5.80 |
| 15,000 | $79 | 1,500 | $5.27 |
| 32,000 | $149 | 3,200 | $4.66 |
| 60,000 | $249 | 6,000 | $4.15 |
Only successful calls use credits; failed calls and timeouts cost nothing. At a balance of 0 calls pause, never a surprise charge. Authenticate with the Authorization: Bearer header.
| Option | What it does | Where it stops |
|---|---|---|
| chrischall/eventbrite-mcp | MCP server for your tickets, orders, organizer events, attendees, reports and public search. MIT, last commit 5 Nov 2026, 0 stars. | Read only. Needs an API token, and search needs a browser extension and an open Eventbrite tab. |
| stalinyang/eventbrite-mcp-server | Python server over the API with a local cache for date searches. 1 star, last commit 25 Sep 2026. | Runs on your computer with an API token. No license file on GitHub. |
| joshuachestang/eventbrite-mcp-server | Create, list, update, publish and cancel events, venues and categories. MIT, 4 stars, last commit 30 May 2025. | No orders, attendees or emails. Needs an API key. |
| vishalsachdev/eventbrite-mcp | Event management server. Its README lists two implemented tools. MIT, 3 stars, last commit 21 Mar 2025. | Two tools, local, API token. |
| Zapier MCP | 7 actions: create, publish and find events, create a ticket class, find an attendee by ID, raw API request. | No orders, emails, refunds or promo codes. Each call spends Zapier tasks. |
| Pipedream | Hosted MCP server with 6 actions: create an event, read attendees, details, summary and your orders. | No refunds, emails or promo codes. |
The GitHub servers suit one developer who already has an API token and wants reads on one computer. Cotlet adds emails, check-in, refunds, promo codes and public search, hosted, with one sign-in and the same tools in ChatGPT, Claude and scripts.
Take Group sp. z o.o. runs Cotlet. It is a software company registered in Poland, EU (VAT PL6342984273), working since 2019, founded by Bart Krawczyk (Co-founder, CTO) and Jake Slugocki (Co-founder, SEO, sales and marketing). Write to contact@cotlet.dev with questions about the Eventbrite tools.
Sign up at cotlet.dev, log in to Eventbrite once in its Cloud Browser and add Cotlet to ChatGPT or Claude, following the steps in your console. No API key is needed. ChatGPT and Claude then work in your Eventbrite account through Cotlet, in their phone apps too.
With Cotlet, ChatGPT, Claude and other AI agents handle jobs like these in Eventbrite: email attendees before the event; weekly ticket sales report; refund an order. You ask in plain words, and anything that reaches other people waits for your OK first.
Create a free account at https://cotlet.dev, open Eventbrite under Integrations in the console and log in to Eventbrite in its Cloud Browser. The trial starts with your first app, no card asked.
Yes. search_public_events reads the public search results the way a visitor sees them. Eventbrite's own Event Search API was shut down on 12 Dec 2019, and its documented replacements only look up events by ID, venue or organization.
Yes, with the same options as Emails to attendees: all attendees, those who registered after a date, specific attendees or one ticket type, sent now or scheduled. "All attendees" reaches only people registered at that moment. If your login does not show the option, the account owner must give you permission to email attendees in the organization settings.
Eventbrite emails the buyer a refund confirmation and returns the money to the original payment method within 5 to 7 business days. Free orders cannot be refunded; cancel or delete them in Eventbrite instead.
No. We found none on Eventbrite's developer pages or in its changelog (checked 6 Nov 2026). Eventbrite does have a REST API. Cotlet gives your agent hosted Eventbrite tools over MCP and REST without an API token.
No. Cotlet works in your signed-in Eventbrite account, so there is no token to create and no app to register. Your role in the organization decides what your agent can do.
No. Eventbrite bills its own fees as before. Its pricing page lists no fees for free events and 3.7% + $1.79 per paid ticket plus 2.9% per order (checked 6 Nov 2026).
Only the door is different. Both expose the same 13 tools, inputs and answers, with one API key and one price. Agents use MCP; scripts and HTTP steps use REST.
No. Cotlet is independent and not affiliated with Eventbrite, Inc.
Free 7-day trial with 2,000 credits, no card needed.
May we use Google Analytics to see which pages help people? It sets cookies only if you accept. No ads, and we never sell data. Cookie policy