Access the Eventbrite API with managed OAuth authentication. Manage events, venues, ticket classes, orders, attendees, and more.
# Get current user
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/eventbrite/v3/users/me/')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
https://api.maton.ai/eventbrite/{native-api-path}
Maton proxies requests to www.eventbriteapi.com and automatically injects your OAuth token.
All requests require the Maton API key in the Authorization header:
Authorization: Bearer $MATON_API_KEY
Environment Variable: Set your API key as MATON_API_KEY:
export MATON_API_KEY="YOUR_API_KEY"
Manage your Eventbrite OAuth connections at https://api.maton.ai.
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/connections?app=eventbrite&status=ACTIVE')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
python <<'EOF'
import urllib.request, os, json
data = json.dumps({'app': 'eventbrite'}).encode()
req = urllib.request.Request('https://api.maton.ai/connections', data=data, method='POST')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Content-Type', 'application/json')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/connections/{connection_id}')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Response:
{
"connection": {
"connection_id": "{connection_id}",
"status": "ACTIVE",
"creation_time": "2026-02-07T09:11:20.516013Z",
"last_updated_time": "2026-02-07T09:14:35.273822Z",
"url": "https://connect.maton.ai/?session_token=...",
"app": "eventbrite",
"metadata": {}
}
}
Open the returned url in a browser to complete OAuth authorization.
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/connections/{connection_id}', method='DELETE')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
If you have multiple Eventbrite connections, specify which one to use with the Maton-Connection header:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/eventbrite/v3/users/me/')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Maton-Connection', '{connection_id}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
If you have multiple connections, always include this header to ensure requests go to the intended account.
GET /eventbrite/v3/users/me/
Response:
{
"emails": [{"email": "user@example.com", "verified": true, "primary": true}],
"id": "1234567890",
"name": "John Doe",
"first_name": "John",
"last_name": "Doe",
"is_public": false,
"image_id": null
}
GET /eventbrite/v3/users/me/organizations/
GET /eventbrite/v3/users/me/orders/
GET /eventbrite/v3/organizations/{organization_id}/events/
Query parameters:
status - Filter by status: draft, live, started, ended, completed, canceledorder_by - Sort order: start_asc, start_desc, created_asc, created_desctime_filter - Filter by time: current_future, pastGET /eventbrite/v3/organizations/{organization_id}/venues/
POST /eventbrite/v3/organizations/{organization_id}/venues/
Content-Type: application/json
{
"venue": {
"name": "Conference Center",
"address": {
"address_1": "123 Main St",
"city": "San Francisco",
"region": "CA",
"postal_code": "94105",
"country": "US"
}
}
}
GET /eventbrite/v3/events/{event_id}/
Events must be created under an organization:
POST /eventbrite/v3/organizations/{organization_id}/events/
Content-Type: application/json
{
"event": {
"name": {"html": "My Event"},
"description": {"html": "<p>Event description</p>"},
"start": {
"timezone": "America/Los_Angeles",
"utc": "2026-03-01T19:00:00Z"
},
"end": {
"timezone": "America/Los_Angeles",
"utc": "2026-03-01T22:00:00Z"
},
"currency": "USD",
"online_event": false,
"listed": true,
"shareable": true,
"capacity": 100,
"category_id": "103",
"format_id": "1"
}
}
POST /eventbrite/v3/events/{event_id}/
Content-Type: application/json
{
"event": {
"name": {"html": "Updated Event Name"},
"capacity": 200
}
}
POST /eventbrite/v3/events/{event_id}/publish/
POST /eventbrite/v3/events/{event_id}/unpublish/
POST /eventbrite/v3/events/{event_id}/cancel/
DELETE /eventbrite/v3/events/{event_id}/
GET /eventbrite/v3/events/{event_id}/ticket_classes/
POST /eventbrite/v3/events/{event_id}/ticket_classes/
Content-Type: application/json
{
"ticket_class": {
"name": "General Admission",
"description": "Standard entry ticket",
"quantity_total": 100,
"cost": "USD,2500",
"sales_start": "2026-01-01T00:00:00Z",
"sales_end": "2026-02-28T23:59:59Z",
"minimum_quantity": 1,
"maximum_quantity": 10
}
}
For free tickets, omit the cost field or set free: true.
POST /eventbrite/v3/events/{event_id}/ticket_classes/{ticket_class_id}/
Content-Type: application/json
{
"ticket_class": {
"quantity_total": 150
}
}
DELETE /eventbrite/v3/events/{event_id}/ticket_classes/{ticket_class_id}/
GET /eventbrite/v3/events/{event_id}/attendees/
Query parameters:
status - Filter by status: attending, not_attending, unpaidchanged_since - ISO 8601 timestamp to get attendees changed afterGET /eventbrite/v3/events/{event_id}/attendees/{attendee_id}/
GET /eventbrite/v3/events/{event_id}/orders/
Query parameters:
status - Filter by status: active, inactive, allchanged_since - ISO 8601 timestampGET /eventbrite/v3/orders/{order_id}/
GET /eventbrite/v3/venues/{venue_id}/
POST /eventbrite/v3/venues/{venue_id}/
Content-Type: application/json
{
"venue": {
"name": "Updated Venue Name"
}
}
GET /eventbrite/v3/categories/
Response:
{
"locale": "en_US",
"pagination": {"object_count": 21, "page_number": 1, "page_size": 50},
"categories": [
{"id": "103", "name": "Music", "short_name": "Music"},
{"id": "101", "name": "Business & Professional", "short_name": "Business"},
{"id": "110", "name": "Food & Drink", "short_name": "Food & Drink"}
]
}
GET /eventbrite/v3/categories/{category_id}/
GET /eventbrite/v3/subcategories/
GET /eventbrite/v3/formats/
Common formats:
1 - Conference2 - Seminar or Talk5 - Festival or Fair6 - Concert or Performance9 - Class, Training, or Workshop10 - Meeting or Networking Event11 - Party or Social GatheringGET /eventbrite/v3/system/countries/
GET /eventbrite/v3/system/regions/
Eventbrite uses a combination of page-based and continuation-based pagination:
GET /eventbrite/v3/organizations/{org_id}/events/?page_size=50
Response:
{
"pagination": {
"object_count": 150,
"page_number": 1,
"page_size": 50,
"page_count": 3,
"has_more_items": true,
"continuation": "eyJwYWdlIjogMn0"
},
"events": [...]
}
For subsequent pages, use the continuation token:
GET /eventbrite/v3/organizations/{org_id}/events/?continuation=eyJwYWdlIjogMn0
Include related data by using the expand parameter:
GET /eventbrite/v3/events/{event_id}/?expand=venue,ticket_classes,category
Common expansions:
venue - Include venue detailsticket_classes - Include ticket informationcategory - Include category detailssubcategory - Include subcategory detailsformat - Include format detailsorganizer - Include organizer informationconst response = await fetch(
'https://api.maton.ai/eventbrite/v3/users/me/',
{
headers: {
'Authorization': `Bearer ${process.env.MATON_API_KEY}`
}
}
);
const user = await response.json();
import os
import requests
response = requests.get(
'https://api.maton.ai/eventbrite/v3/users/me/',
headers={'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}'}
)
user = response.json()
/)curl -g when URLs contain brackets to disable glob parsingjq or other commands, environment variables like $MATON_API_KEY may not expand correctly in some shell environments| Status | Meaning |
|---|---|
| -------- | --------- |
| 400 | Missing Eventbrite connection or invalid arguments |
| 401 | Invalid or missing Maton API key |
| 403 | Not authorized (check scopes or use organization endpoints) |
| 404 | Resource not found |
| 429 | Rate limited |
| 4xx/5xx | Passthrough error from Eventbrite API |
NOT_AUTHORIZED with legacy user endpoints:
{"status_code": 403, "error": "NOT_AUTHORIZED", "error_description": "This user is not able to use legacy user endpoints, please use the organization equivalent."}
Solution: Use /organizations/{org_id}/events/ instead of /users/me/owned_events/
MATON_API_KEY environment variable is set:echo $MATON_API_KEY
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/connections')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
eventbrite. For example:https://api.maton.ai/eventbrite/v3/users/me/https://api.maton.ai/v3/users/me/共 2 个版本