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.