Skill: byungkyu/eventbrite (version 1.0.3)

--- name: eventbrite description: | Eventbrite API integration with managed OAuth. Manage events, venues, ticket classes, orders, and attendees. Use this skill when users want to create and manage events, check orders, view attendees, or access event categories. For other third party apps, use the api-gateway skill (https://clawhub.ai/byungkyu/api-gateway). Requires network access and valid Maton API key. metadata: author: maton version: "1.0" clawdbot: emoji: 🧠 requires: env: - MATON_API_KEY --- # Eventbrite Access the Eventbrite API with managed OAuth authentication. Manage events, venues, ticket classes, orders, attendees, and more. ## Quick Start ```bash # 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 ``` ## Base URL ``` https://api.maton.ai/eventbrite/{native-api-path} ``` Maton proxies requests to `www.eventbriteapi.com` and automatically injects your OAuth token. ## Authentication 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`: ```bash export MATON_API_KEY="YOUR_API_KEY" ``` ### Getting Your API Key 1. Sign in or create an account at [maton.ai](https://maton.ai) 2. Go to [maton.ai/settings](https://maton.ai/settings) 3. Copy your API key ## Connection Management Manage your Eventbrite OAuth connections at `https://api.maton.ai`. ### List Connections ```bash 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 ``` ### Create Connection ```bash 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 ``` ### Get Connection ```bash 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:** ```json { "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. ### Delete Connection ```bash 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 ``` ### Specifying Connection If you have multiple Eventbrite connections, specify which one to use with the `Maton-Connection` header: ```bash 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. ## Security & Permissions - Access is scoped to events, venues, ticket classes, orders, and attendees within the connected Eventbrite account. - **All write operations require explicit user approval.** Before executing any create, update, or delete call, confirm the target resource and intended effect with the user. ## API Reference ### User Operations #### Get Current User ```bash GET /eventbrite/v3/users/me/ ``` **Response:** ```json { "emails": [{"email": "[REDACTED_SECRET]", "verified": true, "primary": true}], "id": "1234567890", "name": "John Doe", "first_name": "John", "last_name": "Doe", "is_public": false, "image_id": null } ``` #### List User Organizations ```bash GET /eventbrite/v3/users/me/organizations/ ``` #### List User Orders ```bash GET /eventbrite/v3/users/me/orders/ ``` ### Organization Operations #### List Organization Events ```bash GET /eventbrite/v3/organizations/{organization_id}/events/ ``` Query parameters: - `status` - Filter by status: `draft`, `live`, `started`, `ended`, `completed`, `canceled` - `order_by` - Sort order: `start_asc`, `start_desc`, `created_asc`, `created_desc` - `time_filter` - Filter by time: `current_future`, `past` #### List Organization Venues ```bash GET /eventbrite/v3/organizations/{organization_id}/venues/ ``` #### Create Venue ```bash 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" } } } ``` ### Event Operations #### Get Event ```bash GET /eventbrite/v3/events/{event_id}/ ``` #### Create Event Events must be created under an organization: ```bash 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" } } ``` #### Update Event ```bash POST /eventbrite/v3/events/{event_id}/ Content-Type: application/json { "event": { "name": {"html": "Updated Event Name"}, "capacity": 200 } } ``` #### Publish Event ```bash POST /eventbrite/v3/events/{event_id}/publish/ ``` #### Unpublish Event ```bash POST /eventbrite/v3/events/{event_id}/unpublish/ ``` #### Cancel Event ```bash POST /eventbrite/v3/events/{event_id}/cancel/ ``` #### Delete Event ```bash DELETE /eventbrite/v3/events/{event_id}/ ``` ### Ticket Class Operations #### List Ticket Classes ```bash GET /eventbrite/v3/events/{event_id}/ticket_classes/ ``` #### Create Ticket Class ```bash 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`. #### Update Ticket Class ```bash POST /eventbrite/v3/events/{event_id}/ticket_classes/{ticket_class_id}/ Content-Type: application/json { "ticket_class": { "quantity_total": 150 } } ``` #### Delete Ticket Class ```bash DELETE /eventbrite/v3/events/{event_id}/ticket_classes/{ticket_class_id}/ ``` ### Attendee Operations #### List Event Attendees ```bash GET /eventbrite/v3/events/{event_id}/attendees/ ``` Query parameters: - `status` - Filter by status: `attending`, `not_attending`, `unpaid` - `changed_since` - ISO 8601 timestamp to get attendees changed after #### Get Attendee ```bash GET /eventbrite/v3/events/{event_id}/attendees/{attendee_id}/ ``` ### Order Operations #### List Event Orders ```bash GET /eventbrite/v3/events/{event_id}/orders/ ``` Query parameters: - `status` - Filter by status: `active`, `inactive`, `all` - `changed_since` - ISO 8601 timestamp #### Get Order ```bash GET /eventbrite/v3/orders/{order_id}/ ``` ### Venue Operations #### Get Venue ```bash GET /eventbrite/v3/venues/{venue_id}/ ``` #### Update Venue ```bash POST /eventbrite/v3/venues/{venue_id}/ Content-Type: application/json { "venue": { "name": "Updated Venue Name" } } ``` ### Reference Data #### List Categories ```bash GET /eventbrite/v3/categories/ ``` **Response:** ```json { "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 Category ```bash GET /eventbrite/v3/categories/{category_id}/ ``` #### List Subcategories ```bash GET /eventbrite/v3/subcategories/ ``` #### List Formats ```bash GET /eventbrite/v3/formats/ ``` **Common formats:** - `1` - Conference - `2` - Seminar or Talk - `5` - Festival or Fair - `6` - Concert or Performance - `9` - Class, Training, or Workshop - `10` - Meeting or Networking Event - `11` - Party or Social Gathering #### List Countries ```bash GET /eventbrite/v3/system/countries/ ``` #### List Regions ```bash GET /eventbrite/v3/system/regions/ ``` ## Pagination Eventbrite uses a combination of page-based and continuation-based pagination: ```bash GET /eventbrite/v3/organizations/{org_id}/events/?page_size=50 ``` **Response:** ```json { "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: ```bash GET /eventbrite/v3/organizations/{org_id}/events/?continuation=eyJwYWdlIjogMn0 ``` ## Expansions Include related data by using the `expand` parameter: ```bash GET /eventbrite/v3/events/{event_id}/?expand=venue,ticket_classes,category ``` Common expansions: - `venue` - Include venue details - `ticket_classes` - Include ticket information - `category` - Include category details - `subcategory` - Include subcategory details - `format` - Include format details - `organizer` - Include organizer information ## Code Examples ### JavaScript ```javascript const response = await fetch( 'https://api.maton.ai/eventbrite/v3/users/me/', { headers: { 'Authorization': `Bearer ${process.env.MATON_API_KEY}` } } ); const user = await response.json(); ``` ### Python ```python 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() ``` ## Notes - All endpoint paths should end with a trailing slash (`/`) - Event creation requires an organization - use organization-based endpoints - Legacy user-based event endpoints are deprecated; use organization equivalents - Timestamps are in ISO 8601 format (UTC) - Currency amounts are in minor units (cents) - e.g., "USD,2500" = $25.00 - Rate limit: 1,000 calls per hour, 48,000 calls per day - Event Search API is no longer publicly available (deprecated February 2020) - IMPORTANT: When using curl commands, use `curl -g` when URLs contain brackets to disable glob parsing - IMPORTANT: When piping curl output to `jq` or other commands, environment variables like `$MATON_API_KEY` may not expand correctly in some shell environments ## Error Handling | 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 | ### Common Errors **NOT_AUTHORIZED with legacy user endpoints:** ```json {"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/` ### Troubleshooting: API Key Issues 1. Check that the `MATON_API_KEY` environment variable is set: ```bash echo $MATON_API_KEY ``` 2. Verify the API key is valid by listing connections: ```bash 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 ``` ### Troubleshooting: Invalid App Name 1. Ensure your URL path starts with `eventbrite`. For example: - Correct: `https://api.maton.ai/eventbrite/v3/users/me/` - Incorrect: `https://api.maton.ai/v3/users/me/` ## Resources - [Eventbrite API Documentation](https://www.eventbrite.com/platform/api) - [API Basics](https://www.eventbrite.com/platform/docs/api-basics) - [API Explorer](https://www.eventbrite.com/platform/docs/api-explorer) - [Maton Community](https://discord.com/invite/dBfFAcefs2) - [Maton Support](mailto:[REDACTED_SECRET])


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)