Eventbrite.Net

A strongly-typed .NET 10 client library for the Eventbrite REST API.
Supports private-token and OAuth 2.0 authorization-code authentication, with built-in DI registration, in-memory token/state storage, and full IntelliSense documentation on every public type.
Requirements
Installation
dotnet add package Eventbrite.Net
Configuration
Add an Eventbrite section to appsettings.json (non-secret values only):
{
"Eventbrite": {
"API_KEY": "<your-client-id>",
"REDIRECT_URI": "https://yourapp.com/eventbrite/auth/callback",
"FrontendRedirectUri": "https://yourapp.com/dashboard",
"Scopes": []
}
}
Store secrets with the .NET Secret Manager (never commit them):
dotnet user-secrets set "Eventbrite:CLIENT_SECRET" "<your-client-secret>"
dotnet user-secrets set "Eventbrite:PRIVATE_TOKEN" "<your-private-token>"
All configuration keys
| Key |
Required |
Default |
Description |
Eventbrite:API_KEY |
OAuth only |
— |
OAuth application client ID |
Eventbrite:CLIENT_SECRET |
OAuth only |
— |
OAuth application client secret (use secrets) |
Eventbrite:PRIVATE_TOKEN |
Private only |
— |
Long-lived private OAuth token (use secrets) |
Eventbrite:REDIRECT_URI |
OAuth only |
"" |
Absolute callback URI registered in your Eventbrite app |
Eventbrite:FrontendRedirectUri |
No |
null |
Where to redirect the browser after a successful OAuth callback |
Eventbrite:Scopes |
No |
[] |
OAuth scopes to request (space-joined before sending) |
Eventbrite:API_BASE_URL |
No |
https://www.eventbriteapi.com/v3/ |
Eventbrite REST API base URL |
Eventbrite:AUTHORIZATION_ENDPOINT |
No |
https://www.eventbrite.com/oauth/authorize |
OAuth authorization endpoint |
Eventbrite:TOKEN_ENDPOINT |
No |
https://www.eventbrite.com/oauth/token |
OAuth token endpoint |
Quick start — private token
Use this mode when your application acts on behalf of a single Eventbrite account using a long-lived private OAuth token.
// Program.cs
builder.Services.AddEventbriteIntegration(builder.Configuration);
// Inject IPrivateAuthenticatedService anywhere in your app
public class MyService(IPrivateAuthenticatedService eventbrite)
{
public async Task<string?> GetMyNameAsync(CancellationToken ct)
{
var user = await eventbrite.GetMyProfileAsync(ct);
return user?.Name?.Text;
}
}
Quick start — OAuth 2.0 (authorization-code flow)
Use this mode when users authorize your application with their own Eventbrite accounts.
// Program.cs
builder.Services.AddEventbriteIntegration(builder.Configuration, isExternallyAuthenticated: true);
// ...
// Register the built-in OAuth callback and diagnostic endpoints
app.MapEventbriteEndpoints();
This maps the following Minimal API endpoints:
| Method |
Path |
Description |
GET |
/eventbrite/auth/start |
Redirects the user to Eventbrite to begin authorization |
GET |
/eventbrite/auth/callback |
Handles the redirect back, exchanges the code for tokens |
GET |
/eventbrite/auth/status |
Returns the stored token's connection state and expiry |
GET |
/eventbrite/getMe |
Returns the authenticated user's Eventbrite profile |
GET |
/eventbrite/myOrganisations |
Returns the authenticated user's organizations |
// Inject IExternalAuthenticatedService anywhere in your app
public class MyService(IExternalAuthenticatedService eventbrite)
{
public async Task ShowEventsAsync(string orgId, CancellationToken ct)
{
var result = await eventbrite.ListEventsByOrganizationAsync(orgId, cancellationToken: ct);
foreach (var ev in result?.Events ?? [])
Console.WriteLine(ev.Name?.Text);
}
}
For high-volume list endpoints, you can use built-in IAsyncEnumerable<T> helpers from Eventbrite.Helpers.EventbritePaginationExtensions.
These helpers automatically follow continuation tokens and yield individual items.
Available helpers include:
ListAllEventsByOrganizationAsync
ListAllAttendeesByEventAsync
ListAllOrdersByOrganizationAsync
ListAllOrdersByEventAsync
ListAllOrdersByUserAsync
ListAllTicketClassesByEventAsync
await foreach (var ev in eventbrite.ListAllEventsByOrganizationAsync(orgId, pageSize: 50, cancellationToken: ct))
{
Console.WriteLine(ev.Name?.Text);
}
Low-level paged methods are still available when you need manual cursor control.
Available APIs
Both IPrivateAuthenticatedService and IExternalAuthenticatedService expose the full IEventbriteApiService surface:
Users
| Method |
Verb |
GetMyProfileAsync |
GET |
GetUserByIdAsync |
GET |
GetMyOrganizationsAsync |
GET |
GetOrganizationsByUserIdAsync |
GET |
Organizations
| Method |
Verb |
ListOrganizationMembersAsync |
GET |
ListOrganizationRolesAsync |
GET |
Events
| Method |
Verb |
GetEventByIdAsync |
GET |
CreateEventAsync |
POST |
UpdateEventAsync |
POST |
PublishEventAsync |
POST |
UnpublishEventAsync |
POST |
CopyEventAsync |
POST |
CancelEventAsync |
POST |
DeleteEventAsync |
DELETE |
ListEventsByOrganizationAsync |
GET |
ListEventsByVenueAsync |
GET |
ListEventsBySeriesAsync |
GET |
GetEventDescriptionAsync |
GET |
GetEventSeriesAsync |
GET |
CreateEventScheduleAsync |
POST |
Attendees
| Method |
Verb |
GetAttendeeByIdAsync |
GET |
ListAttendeesByEventAsync |
GET |
ListAttendeesByOrganizationAsync |
GET |
Orders
| Method |
Verb |
GetOrderByIdAsync |
GET |
ListOrdersByEventAsync |
GET |
ListOrdersByOrganizationAsync |
GET |
ListOrdersByUserAsync |
GET |
Ticket Classes
| Method |
Verb |
GetTicketClassAsync |
GET |
CreateTicketClassAsync |
POST |
UpdateTicketClassAsync |
POST |
ListTicketClassesByEventAsync |
GET |
ListTicketClassesForSaleAsync |
GET |
Ticket Groups
| Method |
Verb |
GetTicketGroupAsync |
GET |
CreateTicketGroupAsync |
POST |
UpdateTicketGroupAsync |
POST |
AddTicketClassToGroupAsync |
POST |
ListTicketGroupsByOrganizationAsync |
GET |
DeleteTicketGroupAsync |
DELETE |
Discounts
| Method |
Verb |
GetDiscountAsync |
GET |
CreateDiscountAsync |
POST |
UpdateDiscountAsync |
POST |
SearchDiscountsAsync |
GET |
DeleteDiscountAsync |
DELETE |
| Method |
Verb |
GetCategoryAsync |
GET |
GetSubcategoryAsync |
GET |
ListCategoriesAsync |
GET |
ListSubcategoriesAsync |
GET |
GetFormatAsync |
GET |
ListFormatsAsync |
GET |
Questions
| Method |
Verb |
ListCannedQuestionsAsync |
GET |
GetCannedQuestionAsync |
GET |
CreateCannedQuestionAsync |
POST |
UpdateCannedQuestionAsync |
POST |
DeleteCannedQuestionAsync |
DELETE |
ListCustomQuestionsAsync |
GET |
GetCustomQuestionAsync |
GET |
CreateCustomQuestionAsync |
POST |
DeleteCustomQuestionAsync |
DELETE |
Webhooks
| Method |
Verb |
GetWebhookByIdAsync |
GET |
CreateWebhookAsync |
POST |
DeleteWebhookAsync |
DELETE |
ListWebhooksByOrganizationAsync |
GET |
Venue & Organizer
| Method |
Verb |
GetVenueAsync |
GET |
CreateVenueAsync |
POST |
UpdateVenueAsync |
POST |
ListVenuesByOrganizationAsync |
GET |
Structured Content
| Method |
Verb |
GetStructuredContentAsync |
GET |
GetStructuredContentEditAsync |
GET |
SetStructuredContentAsync |
POST |
Inventory & Capacity
| Method |
Verb |
GetInventoryTierAsync |
GET |
CreateInventoryTierAsync |
POST |
UpdateInventoryTierAsync |
POST |
ListInventoryTiersByEventAsync |
GET |
DeleteInventoryTierAsync |
DELETE |
GetCapacityTierAsync |
GET |
UpdateCapacityTierAsync |
POST |
Display Settings
| Method |
Verb |
GetDisplaySettingsAsync |
GET |
UpdateDisplaySettingsAsync |
POST |
GetTicketBuyerSettingsAsync |
GET |
UpdateTicketBuyerSettingsAsync |
POST |
Seat Maps
| Method |
Verb |
ListSeatMapsByOrganizationAsync |
GET |
CreateSeatMapForEventAsync |
POST |
Teams
| Method |
Verb |
GetTeamByIdAsync |
GET |
ListTeamsByEventAsync |
GET |
ListAttendeesByTeamAsync |
GET |
CreateTeamAsync |
POST |
VerifyTeamPasswordAsync |
POST |
SearchTeamsAsync |
GET |
Pricing
| Method |
Verb |
CalculatePricingAsync |
POST |
ListPricingAsync |
GET |
| Method |
Verb |
GetMediaAsync |
GET |
InitiateMediaUploadAsync |
POST |
GetMediaUploadStatusAsync |
GET |
Reports
| Method |
Verb |
GetSalesReportAsync |
GET |
GetAttendeeReportAsync |
GET |
Text Overrides
| Method |
Verb |
GetTextOverridesAsync |
GET |
CreateTextOverridesAsync |
POST |
Miscellaneous
| Method |
Verb |
GetBalanceAsync |
GET |
All methods accept an optional CancellationToken. List methods accept optional continuation and pageSize parameters for cursor-based pagination. Many event/attendee methods accept an expansions array to embed related sub-objects inline.