Skip to content

Events API Reference ​

Table of Contents ​

  1. Overview
  2. API Documentation Resources
  3. Base Configuration
  4. Event Management Endpoints
  5. Registration Management
  6. Booth Configuration
  7. Bundle Management
  8. Activity & Session Management
  9. Exhibitor Management
  10. Organization Management
  11. Venue Management
  12. Speaker Management
  13. Invoice Settings
  14. Error Responses

Overview ​

The Engagifii Events API provides comprehensive event management functionality through RESTful endpoints. All endpoints follow consistent patterns for requests and responses.

API Documentation Resources ​

OpenAPI Specification ​

  • File: openapi.yaml
  • Description: Complete OpenAPI 3.0.3 specification with all endpoints, schemas, and security definitions
  • Usage: Import into Swagger UI, generate client SDKs, or validate API contracts
  • Features:
    • All 150+ endpoints documented
    • Request/response schemas
    • Security definitions
    • Server configurations

Postman Collection ​

  • File: postman-collection.json
  • Description: Ready-to-use Postman collection for testing and exploration
  • Features:
    • Pre-configured authentication with auto-refresh
    • Environment variables setup
    • Test scripts for validation
    • Example requests for all endpoints
  • Import Instructions:
    1. Open Postman
    2. Click Import → Upload Files
    3. Select postman-collection.json
    4. Configure environment variables:
      • identity_server_url
      • client_id
      • client_secret
      • tenant_code

Quick Testing ​

bash
# Using OpenAPI spec with curl
swagger-codegen generate -i openapi.yaml -l bash -o ./api-client

# Or import directly into tools
# - Swagger UI: https://editor.swagger.io
# - Postman: Import → OpenAPI 3.0
# - Insomnia: Import → From File

API Conventions ​

  • Base URL: https://engagifii-prod-event.azurewebsites.net
  • API Version: 1.0
  • Content Type: application/json
  • Authentication: OAuth 2.0 Bearer Token
  • Date Format: ISO 8601 (YYYY-MM-DDTHH:mm:ss.sssZ)
  • GUID Format: Standard UUID v4

Base Configuration ​

Required Headers ​

Every request must include:

http
Authorization: Bearer {access_token}
api-version: 1.0
tenant-code: {tenant_code}
Content-Type: application/json

Pagination ​

List endpoints support pagination through ListViewRequest:

json
{
  "PageNumber": 1,
  "PageSize": 10,
  "SortBy": "CreatedDate",
  "SortOrder": "DESC"
}

Response Format ​

Standard response wrapper:

json
{
  "data": [],
  "totalCount": 100,
  "pageNumber": 1,
  "pageSize": 10
}

Event Management Endpoints ​

List Events ​

Endpoint: POST /api/1.0/event/list

Purpose: Retrieve paginated list of events with filtering

Request:

json
{
  "PageNumber": 1,
  "PageSize": 10,
  "OnlyUpcoming": true,
  "SearchText": "Conference",
  "EventTypeIds": [1, 2],
  "StartDateFrom": "2024-01-01",
  "StartDateTo": "2024-12-31",
  "Tags": ["technology", "innovation"]
}

Response:

json
{
  "data": [
    {
      "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "name": "Annual Tech Conference 2024",
      "description": "Leading technology conference",
      "startDateTime": "2024-06-15T09:00:00Z",
      "endDateTime": "2024-06-17T18:00:00Z",
      "eventStatus": "Published",
      "registrantsCapacity": 500,
      "availableRegistrantsCapacity": 245,
      "registrantsCount": 255,
      "isFreeEvent": false,
      "defaultPrice": 299.99,
      "location": {
        "venueId": "venue-guid",
        "venueName": "Convention Center",
        "address": "123 Main St",
        "city": "New York",
        "state": "NY",
        "zipCode": "10001"
      },
      "eventType": "Conference",
      "isRegistrationAllowed": true,
      "registrationStartFrom": "2024-01-01T00:00:00Z",
      "registrationEndDate": "2024-06-01T23:59:59Z"
    }
  ],
  "totalCount": 42,
  "pageNumber": 1,
  "pageSize": 10
}

Error Responses:

  • 400 Bad Request: Invalid filter parameters
  • 401 Unauthorized: Invalid or expired token
  • 403 Forbidden: Insufficient permissions

Get Event Details ​

Endpoint: GET /api/1.0/event/{id}

Purpose: Retrieve complete event details including bundles, sessions, and configuration

Parameters:

  • id (GUID): Event identifier
  • groupId (GUID, optional): Group context for pricing

Response:

json
{
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "name": "Annual Tech Conference 2024",
  "description": "Comprehensive technology conference",
  "iconUrl": "https://storage.engagifii.com/event-icon.png",
  "startDateTime": "2024-06-15T09:00:00Z",
  "endDateTime": "2024-06-17T18:00:00Z",
  "eventWithClass": true,
  "eventWithExhibitor": true,
  "eventStatus": "Published",
  "contacts": {
    "regular": [
      {
        "contactTypeId": 1,
        "contactType": "Primary",
        "name": "John Doe",
        "email": "john@example.com",
        "phone": "+1-555-0100"
      }
    ],
    "finance": [],
    "exhibitor": []
  },
  "bundles": [
    {
      "id": "bundle-guid",
      "name": "VIP Package",
      "defaultPrice": 599.99,
      "description": "Full conference access with VIP benefits"
    }
  ],
  "sessions": [
    {
      "id": "session-guid",
      "name": "Opening Keynote",
      "startDateTime": "2024-06-15T09:00:00Z",
      "endDateTime": "2024-06-15T10:30:00Z",
      "speaker": "Jane Smith",
      "room": "Main Hall"
    }
  ],
  "pricingFramework": {
    "defaultPrice": 299.99,
    "earlyBirdPrice": 249.99,
    "earlyBirdEndDate": "2024-05-01T23:59:59Z"
  },
  "registrationWorkflows": [
    {
      "workflowId": 1,
      "workflowName": "Standard Registration",
      "requiresApproval": false
    }
  ]
}

Create/Update Event ​

Endpoint: POST /api/1.0/event/save

Purpose: Create new event or update existing event

Request:

json
{
  "id": null,  // null for new, GUID for update
  "name": "New Technology Summit",
  "description": "Innovation and technology showcase",
  "iconUrl": "https://example.com/icon.png",
  "startDateTime": "2024-08-15T09:00:00Z",
  "endDateTime": "2024-08-16T18:00:00Z",
  "eventWithClass": false,
  "eventWithExhibitor": true,
  "eventTypeId": 1,
  "contacts": {
    "regular": [
      {
        "contactTypeId": 1,
        "name": "Event Manager",
        "email": "manager@example.com",
        "phone": "+1-555-0101"
      }
    ]
  },
  "location": {
    "venueId": "venue-guid",
    "roomIds": ["room1-guid", "room2-guid"]
  },
  "isFreeEvent": false,
  "defaultPrice": 199.99,
  "registrantsCapacity": 300,
  "isRegistrationOn": true,
  "registrationStartFrom": "2024-03-01T00:00:00Z",
  "registrationEndDate": "2024-08-01T23:59:59Z",
  "eventDates": [
    {
      "date": "2024-08-15",
      "startTime": "09:00",
      "endTime": "18:00"
    },
    {
      "date": "2024-08-16",
      "startTime": "09:00",
      "endTime": "17:00"
    }
  ]
}

Response:

json
{
  "id": "newly-created-event-guid",
  "name": "New Technology Summit",
  // ... full event object
}

Check Event Name Availability ​

Endpoint: POST /api/1.0/event/CheckEventName

Purpose: Verify if event name is already in use

Request:

json
{
  "eventName": "Annual Conference 2024",
  "eventId": null  // Exclude this event from check
}

Response:

json
{
  "isAvailable": true,
  "message": "Event name is available"
}

Registration Management ​

List Event Registrations ​

Endpoint: POST /api/1.0/event/registration/GetEventRegistrations

Purpose: Get all registrations for events with advanced filtering

Request:

json
{
  "filter": {
    "eventId": "event-guid",
    "registrationType": 1,  // 1=Member, 2=Exhibitor
    "registrationStatus": [1, 5],  // Status codes
    "organizationIds": ["org1-guid", "org2-guid"],
    "registrationDateFrom": "2024-01-01",
    "registrationDateTo": "2024-12-31",
    "searchText": "john"
  },
  "pageNumber": 1,
  "pageSize": 20,
  "sortBy": "RegisteredOn",
  "sortOrder": "DESC"
}

Response:

json
{
  "data": [
    {
      "id": "registration-guid",
      "memberId": "member-guid",
      "fullName": "John Doe",
      "email": "john@example.com",
      "organization": "Tech Corp",
      "registrationNumber": "REG-2024-001",
      "registrationType": "Member",
      "registrationStatus": "Approved",
      "registeredOn": "2024-03-15T10:30:00Z",
      "groupId": "group-guid",
      "groupNumber": "GRP-001",
      "invoiceDetail": {
        "invoiceId": "invoice-guid",
        "invoiceNumber": "INV-2024-0001",
        "amount": 299.99,
        "status": "Paid"
      },
      "bundles": [
        {
          "bundleId": "bundle-guid",
          "bundleName": "Standard Package",
          "price": 299.99
        }
      ],
      "approvalStatus": {
        "workflowId": 1,
        "currentStep": "Completed",
        "approvedBy": "Manager Name",
        "approvedDate": "2024-03-16T09:00:00Z"
      }
    }
  ],
  "totalCount": 255,
  "pageNumber": 1,
  "pageSize": 20
}

Create Event Registration ​

Endpoint: POST /api/1.0/event/registration/save

Purpose: Register member or exhibitor for an event

Request:

json
{
  "eventId": "event-guid",
  "memberId": "member-guid",
  "registrationType": 1,  // 1=Member, 2=Exhibitor
  "bundleIds": ["bundle1-guid", "bundle2-guid"],
  "sessionIds": ["session1-guid", "session2-guid"],
  "registrationWorkflowId": 1,
  "roleId": 1,
  "notifyMe": true,
  "customFields": {
    "dietaryRestrictions": "Vegetarian",
    "emergencyContact": "+1-555-0911"
  }
}

Response:

json
{
  "id": "new-registration-guid",
  "registrationNumber": "REG-2024-002",
  "status": "PendingApproval",
  "requiresApproval": true,
  "nextApprover": "manager@example.com",
  "estimatedAmount": 299.99
}

Get Registration Details ​

Endpoint: GET /api/1.0/event/registration/GetById/{id}

Purpose: Get complete registration details including items and history

Response:

json
{
  "id": "registration-guid",
  "eventDetails": {
    "id": "event-guid",
    "name": "Annual Conference",
    "startDate": "2024-06-15"
  },
  "registrantDetails": {
    "memberId": "member-guid",
    "name": "John Doe",
    "email": "john@example.com",
    "phone": "+1-555-0100"
  },
  "registrationItems": {
    "bundles": [
      {
        "id": "bundle-guid",
        "name": "VIP Package",
        "price": 599.99,
        "items": ["Session Access", "Lunch", "Materials"]
      }
    ],
    "sessions": [
      {
        "id": "session-guid",
        "name": "Keynote Speech",
        "dateTime": "2024-06-15T09:00:00Z"
      }
    ]
  },
  "approvalHistory": [
    {
      "step": "Manager Approval",
      "status": "Approved",
      "approvedBy": "Jane Manager",
      "date": "2024-03-16T09:00:00Z",
      "comments": "Approved for professional development"
    }
  ]
}

Approve/Deny Registration ​

Endpoint: POST /api/1.0/event/registration/ApproveRequest

Purpose: Process approval for pending registration

Request:

json
{
  "approvalId": "approval-guid",
  "registrationId": "registration-guid",
  "action": "Approve",  // or "Deny"
  "comments": "Approved for attendance",
  "denyReasonId": null  // Required if denying
}

Response:

json
{
  "success": true,
  "nextStep": "Finance Approval",
  "notificationsSent": ["registrant@example.com", "nextapprover@example.com"]
}

Booth Configuration ​

List Booth Configurations ​

Endpoint: POST /api/1.0/event/boothconfiguration/GetAllBoothconfigurations

Purpose: Get all booth configurations for an event

Request:

json
{
  "filter": {
    "eventId": "event-guid",
    "boothStatus": [1, 2],  // 1=PreAssigned, 2=Available, 3=Sold
    "boothTypeIds": ["type1-guid", "type2-guid"],
    "assignedToOrganizationIds": ["org1-guid"],
    "minPrice": 1000,
    "maxPrice": 5000
  },
  "pageNumber": 1,
  "pageSize": 20
}

Response:

json
{
  "data": [
    {
      "id": "booth-guid",
      "boothName": "A101",
      "boothType": "Premium Corner",
      "boothTypeId": "type-guid",
      "dimensions": {
        "length": 10,
        "width": 10,
        "area": 100
      },
      "staffCapacity": 4,
      "price": 2500.00,
      "defaultPrice": 2500.00,
      "status": "Available",
      "assignedTo": null,
      "location": {
        "floor": "1",
        "hall": "Main",
        "coordinates": {"x": 100, "y": 200}
      }
    }
  ],
  "totalCount": 150,
  "pageNumber": 1,
  "pageSize": 20
}

Check Booth Availability ​

Endpoint: POST /api/1.0/event/boothconfiguration/boothAvailable

Purpose: Check if specific booths are available for assignment

Request:

json
{
  "eventId": "event-guid",
  "boothIds": ["booth1-guid", "booth2-guid", "booth3-guid"],
  "checkDate": "2024-06-15"
}

Response:

json
{
  "availableBooths": [
    {
      "boothId": "booth1-guid",
      "boothName": "A101",
      "isAvailable": true,
      "price": 2500.00
    },
    {
      "boothId": "booth2-guid",
      "boothName": "A102",
      "isAvailable": false,
      "assignedTo": "Tech Corp",
      "reason": "Already assigned"
    }
  ]
}

Get Booth Preferences ​

Endpoint: POST /api/1.0/event/boothconfiguration/getpreferedboothsbyregistration

Purpose: Get booth preferences submitted by a registrant

Request:

json
{
  "filter": {
    "registrationId": "registration-guid",
    "includeAlternatives": true
  }
}

Response:

json
{
  "data": [
    {
      "preferenceOrder": 1,
      "boothId": "booth1-guid",
      "boothName": "A101",
      "status": "Pending",
      "submittedDate": "2024-03-15T10:00:00Z"
    },
    {
      "preferenceOrder": 2,
      "boothId": "booth2-guid",
      "boothName": "B205",
      "status": "Available"
    }
  ]
}

Bundle Management ​

List Event Bundles ​

Endpoint: POST /api/1.0/eventBundle/list

Purpose: Get all bundles for an event

Request:

json
{
  "eventId": "event-guid",
  "includeDisabled": false,
  "includeItems": true
}

Response:

json
{
  "data": [
    {
      "id": "bundle-guid",
      "name": "VIP Package",
      "description": "Complete conference experience",
      "defaultPrice": 599.99,
      "maxUnit": 100,
      "isDefault": false,
      "isEnabled": true,
      "sequence": 1,
      "items": {
        "sessions": ["session1-guid", "session2-guid"],
        "activities": ["activity1-guid"],
        "classes": [],
        "inclusions": ["Lunch", "Materials", "Certificate"]
      },
      "visibility": {
        "isPublic": true,
        "restrictedToOrganizations": [],
        "restrictedToRoles": []
      }
    }
  ],
  "totalCount": 5
}

Create Inline Bundle ​

Endpoint: POST /api/1.0/eventBundle/CreateInlineBundle

Purpose: Create a custom bundle during registration

Request:

json
{
  "eventId": "event-guid",
  "name": "Custom Package",
  "description": "Tailored bundle for special requirements",
  "items": {
    "sessionIds": ["session1-guid", "session3-guid"],
    "activityIds": ["activity2-guid"]
  },
  "price": 399.99,
  "forRegistrationId": "registration-guid"
}

Response:

json
{
  "bundleId": "new-bundle-guid",
  "name": "Custom Package",
  "price": 399.99,
  "created": true
}

Get Bundle Participants ​

Endpoint: POST /api/1.0/eventBundle/participants/list

Purpose: List all participants registered for a specific bundle

Request:

json
{
  "bundleId": "bundle-guid",
  "includeDetails": true,
  "pageNumber": 1,
  "pageSize": 20
}

Response:

json
{
  "data": [
    {
      "participantId": "member-guid",
      "name": "John Doe",
      "email": "john@example.com",
      "organization": "Tech Corp",
      "registrationDate": "2024-03-15T10:00:00Z",
      "registrationStatus": "Confirmed"
    }
  ],
  "totalCount": 45,
  "pageNumber": 1,
  "pageSize": 20
}

Activity & Session Management ​

List Event Activities ​

Endpoint: POST /api/1.0/eventActivity/list

Purpose: Get all activities/sessions for an event

Request:

json
{
  "eventId": "event-guid",
  "activityTypeIds": [1, 2],
  "speakerIds": ["speaker1-guid"],
  "dateFrom": "2024-06-15",
  "dateTo": "2024-06-17",
  "searchText": "workshop"
}

Response:

json
{
  "data": [
    {
      "id": "activity-guid",
      "name": "Advanced Workshop",
      "description": "Hands-on technical workshop",
      "activityType": "Workshop",
      "startDateTime": "2024-06-16T14:00:00Z",
      "endDateTime": "2024-06-16T17:00:00Z",
      "duration": 180,
      "location": {
        "venue": "Convention Center",
        "room": "Workshop Room A"
      },
      "speakers": [
        {
          "id": "speaker-guid",
          "name": "Dr. Jane Smith",
          "title": "Senior Engineer"
        }
      ],
      "capacity": 30,
      "registeredCount": 25,
      "price": 150.00
    }
  ],
  "totalCount": 12,
  "pageNumber": 1,
  "pageSize": 10
}

Create/Update Activity ​

Endpoint: POST /api/1.0/eventActivity/save

Purpose: Create new or update existing activity

Request:

json
{
  "id": null,  // null for new
  "eventId": "event-guid",
  "name": "Technical Workshop",
  "description": "Deep dive into new technologies",
  "activityTypeId": 2,
  "startDateTime": "2024-06-16T14:00:00Z",
  "endDateTime": "2024-06-16T17:00:00Z",
  "venueId": "venue-guid",
  "roomId": "room-guid",
  "speakerIds": ["speaker1-guid", "speaker2-guid"],
  "capacity": 50,
  "price": 200.00,
  "materials": ["Workbook", "Sample Code"],
  "prerequisites": "Basic programming knowledge"
}

Response:

json
{
  "id": "new-activity-guid",
  "name": "Technical Workshop",
  // ... full activity object
}

Error Responses ​

Standard Error Format ​

All API errors follow this structure:

json
{
  "error": {
    "code": "ERROR_CODE",
    "message": "Human-readable error message",
    "details": {
      "field": ["Validation error message"],
      "additionalInfo": "Context-specific information"
    },
    "timestamp": "2024-01-15T10:30:00Z",
    "traceId": "correlation-id-for-debugging"
  }
}

Common Error Codes ​

CodeHTTP StatusDescriptionResolution
INVALID_REQUEST400Request validation failedCheck request format and required fields
UNAUTHORIZED401Authentication failedRefresh access token
FORBIDDEN403Insufficient permissionsVerify user has required role
NOT_FOUND404Resource not foundVerify resource ID exists
CONFLICT409Resource conflictResource already exists or state conflict
RATE_LIMITED429Too many requestsImplement backoff and retry
SERVER_ERROR500Internal server errorContact support if persists

Validation Error Example ​

json
{
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Request validation failed",
    "details": {
      "eventId": ["Event ID is required"],
      "startDateTime": ["Start date must be in the future"],
      "capacity": ["Capacity must be greater than 0"]
    }
  }
}

Code Examples ​

JavaScript - Complete Event Registration Flow ​

javascript
async function registerForEvent(client, eventId, memberId) {
  try {
    // 1. Get event details
    const event = await client.get(`/api/1.0/event/${eventId}`);
    
    // 2. Check availability
    if (event.availableRegistrantsCapacity <= 0) {
      throw new Error('Event is full');
    }
    
    // 3. Get available bundles
    const bundles = await client.post('/api/1.0/eventBundle/list', {
      eventId: eventId,
      includeDisabled: false
    });
    
    // 4. Create registration
    const registration = await client.post('/api/1.0/event/registration/save', {
      eventId: eventId,
      memberId: memberId,
      registrationType: 1,
      bundleIds: [bundles.data[0].id],  // Select first bundle
      notifyMe: true
    });
    
    console.log(`Registration created: ${registration.registrationNumber}`);
    
    // 5. Handle approval if needed
    if (registration.requiresApproval) {
      console.log(`Approval required. Next approver: ${registration.nextApprover}`);
    }
    
    return registration;
    
  } catch (error) {
    console.error('Registration failed:', error);
    throw error;
  }
}

Python - Booth Assignment Workflow ​

python
async def assign_booth_to_exhibitor(client, event_id, registration_id, booth_preferences):
    """Complete booth assignment workflow"""
    
    # 1. Check booth availability
    availability = await client.post(
        '/api/1.0/event/boothconfiguration/boothAvailable',
        {
            'eventId': event_id,
            'boothIds': booth_preferences
        }
    )
    
    available_booths = [
        b['boothId'] for b in availability['availableBooths'] 
        if b['isAvailable']
    ]
    
    if not available_booths:
        raise Exception('No preferred booths available')
    
    # 2. Submit booth preference
    preference_result = await client.post(
        '/api/1.0/event/boothconfiguration/submitPreference',
        {
            'registrationId': registration_id,
            'preferredBoothIds': available_booths[:3],
            'alternativeBoothIds': available_booths[3:6] if len(available_booths) > 3 else []
        }
    )
    
    # 3. If direct assignment available, confirm it
    if preference_result['assignmentType'] == 'Direct':
        confirmation = await client.post(
            '/api/1.0/event/boothconfiguration/confirmAssignment',
            {
                'registrationId': registration_id,
                'boothId': preference_result['assignedBoothId']
            }
        )
        
        print(f"Booth {confirmation['boothName']} assigned successfully")
        return confirmation
    
    else:
        print("Preference recorded, awaiting manual assignment")
        return preference_result

C# - Comprehensive Event Management ​

csharp
public class EventManagementService
{
    private readonly IEngagifiiClient _client;
    
    public async Task<EventViewModel> CreateCompleteEventAsync()
    {
        // 1. Create base event
        var newEvent = await _client.PostAsync<EventViewModel>(
            "/api/1.0/event/save",
            new EventEditModel
            {
                Name = "Annual Technology Conference",
                Description = "Premier tech event of the year",
                StartDateTime = DateTime.Now.AddMonths(3),
                EndDateTime = DateTime.Now.AddMonths(3).AddDays(2),
                EventWithExhibitor = true,
                RegistrantsCapacity = 500,
                DefaultPrice = 299.99m,
                IsRegistrationOn = true,
                RegistrationStartFrom = DateTime.Now,
                RegistrationEndDate = DateTime.Now.AddMonths(2).AddDays(20)
            });
        
        // 2. Add bundles
        var vipBundle = await _client.PostAsync<object>(
            "/api/1.0/eventBundle/save",
            new
            {
                EventId = newEvent.Id,
                Name = "VIP Package",
                Description = "All-access pass with exclusive benefits",
                DefaultPrice = 599.99m,
                MaxUnit = 50,
                IsEnabled = true
            });
        
        // 3. Add sessions
        var sessions = new[]
        {
            new { Name = "Opening Keynote", StartTime = "09:00", Duration = 90 },
            new { Name = "Tech Workshop", StartTime = "14:00", Duration = 180 },
            new { Name = "Networking Event", StartTime = "18:00", Duration = 120 }
        };
        
        foreach (var session in sessions)
        {
            await _client.PostAsync<object>(
                "/api/1.0/eventActivity/save",
                new
                {
                    EventId = newEvent.Id,
                    Name = session.Name,
                    StartDateTime = newEvent.StartDateTime.AddHours(9),
                    Duration = session.Duration,
                    ActivityTypeId = 1
                });
        }
        
        // 4. Configure booth setup
        for (int i = 1; i <= 20; i++)
        {
            await _client.PostAsync<object>(
                "/api/1.0/event/boothconfiguration/save",
                new
                {
                    EventId = newEvent.Id,
                    BoothName = $"Booth A{i:00}",
                    BoothTypeId = "standard-booth-type-guid",
                    Length = 10,
                    Width = 10,
                    StaffCapacity = 4,
                    DefaultPrice = 2500.00m,
                    Status = 2  // Available
                });
        }
        
        // 5. Publish event
        await _client.PostAsync<bool>(
            "/api/1.0/event/publish",
            new
            {
                EventId = newEvent.Id,
                PublishToWeb = true,
                PublishToMobile = true
            });
        
        return newEvent;
    }
}

Rate Limiting and Best Practices ​

Rate Limits ​

  • Default: 1000 requests per minute per tenant
  • Burst: 100 concurrent requests maximum
  • File uploads: 10 MB maximum file size
  • Batch operations: 100 items per batch

Best Practices ​

  1. Use Pagination: Always paginate large result sets
  2. Cache Responses: Cache static data like event types, venues
  3. Batch Operations: Use bulk endpoints when available
  4. Handle Retries: Implement exponential backoff for failures
  5. Monitor Usage: Track API usage against rate limits

Webhooks and Events ​

The API supports webhooks for real-time notifications:

Available Webhook Events ​

  • event.created
  • event.updated
  • event.cancelled
  • registration.created
  • registration.approved
  • registration.cancelled
  • booth.assigned
  • payment.completed

Webhook Payload ​

json
{
  "eventType": "registration.approved",
  "timestamp": "2024-01-15T10:30:00Z",
  "data": {
    "registrationId": "registration-guid",
    "eventId": "event-guid",
    "memberId": "member-guid",
    "approvedBy": "approver@example.com"
  },
  "metadata": {
    "tenantCode": "TENANT123",
    "correlationId": "correlation-guid"
  }
}

For complete endpoint details and interactive testing, visit the Swagger Documentation.